C语言单链成绩表,【查找链表面试题】面试问题:C语言基于单链… - 看准网

news/2024/7/2 23:32:28

传说中讲课通俗而不庸俗,说话风流而不下流的小编又来了哦,今天的主要内容是:C语言基于单链表得学生成绩管理系统。首先给大家总结下为什么你们学习C语言会觉得难,尤其是对于单链表这块,主要原因得是因为一下两点:

编写流程不清晰

bfa82fa886f948f629b64a8cda473e7d.png

功能设计不清晰

基于单链表得学生成绩管理系统分为两个模块。

9e16bd7d4904925abea655aaef3079fd.png

35ff5a3f2dd18e8a0b6bb919b3cfeca7.png

#include

#include

#include

struct student

{

char name[20];

charnum[20];

int math;

int english;

};

struct Node

{

//int data;

struct student data;

struct Node* next;

};

struct Node* createList

{

//指针的基础:指针变成变量:需要内存

struct Node*headNode= (struct Node*)malloc(sizeof(struct Node));

//那么他就可以表示变量,初始化变量里面的东西

//由于功能限制,导致有些东西不需要初始化

headNode->next = NULL;

return headNode;

}

//2.创建结点:数据

struct Node* createNode(struct student data)

{

struct Node* newNode = (struct Node*)malloc(sizeof(struct Node));

newNode->data = data;

newNode->next = NULL;

return newNode;

}

//插入 学会一种方法就可以:表头插入 组成链表就是连接过程,结构体变量连接结构体

//函数参数是有意义的东西,插入那个链表?--》list 插入的数据是多少--》data

void insertNodeByHead(struct Node* headNode, struct student data)

{

//表头法插入

//1.创建结点

struct Node* newNode = createNode(data);

//插入

newNode->next = headNode->next;

headNode->next = newNode;

}

//查找

struct Node*findByName(struct Node* headNode, char * name)

{

struct Node* pMove = headNode->next;

while (pMove)

{

//比较,改为字符串比较

if (!strcmp(pMove->data.name,name))

{

return pMove;

}

//没有往下走

pMove = pMove->next;

}

return NULL;

}

//删除--》指定删除

void deleteNodeByName(struct Node* headNode, char * name)

{

//找到指定位置那个结点,以及制定位置前面那个结点

//要有两个相邻的指针

struct Node* p = headNode;//前面那个

struct Node* q = headNode->next;//后面那个

if (q == NULL)

{

printf("么有(没有)可用信息,无法删除 ");

}

else

{

while (strcmp(q->data.name,name))

{

p = q;//p到达q的位置

q = p->next;//q到达q的下一个

if (q == NULL)

{

printf("未找到制定位置,无法删除 ");

return;

}

}

p->next = q->next;

free(q);

}

}

//删除--》指定删除

void deleteNodeByNum(struct Node* headNode, char * num)

{

//要有两个相邻的指针

if (q == NULL)

{

}

else

{

while (strcmp(q->data.num, num))

{

p = q;//p到达q的位置

if (q == NULL)

{

return;

}

}

p->next = q->next;

free(q);

}

}

//打印

void printList(struct Node*headNode)

{

//要从二个开始打印

//定义一个移动的指针

printf("姓名 编号 数学 英语 ");

while (pMove)

{

printf("%s %s %d %d ", pMove->data.name, pMove->data.num, pMove->data.math, pMove->data.english);

pMove = pMove->next;

}

printf(" ");

}

系统设计

099efb7b57adc5a9e4f0fe4d656b0cab.png

#define _CRT_SECURE_NO_WARNINGS

#include

#include

#include "singleList.h"

struct Node* list = createList;

//界面

void menu

{

printf(" ");

printf(" 0.退出系统 ");

printf(" 1.录入信息 ");

printf(" 2.显示信息 ");

printf(" 3.删除信息 ");

printf(" 4.查找信息 ");

printf(" 5.保存到文件 ");

}

void menuOfDelete

{

printf(" 1.按照姓名删除 ");

printf(" 2.按照学号删除 ");

}

voidkeyDownOfDelete

{

intchoice;

scanf("%d", &choice);

char name[20];

char num[20];

switch (choice)

{

case 1://1.按照姓名删除

printf("请输入要删除的姓名:");

scanf("%s", name);

deleteNodeByName(list, name);

break;

case 2://2.按照学号删除

printf("请输入要删除的学号:");

scanf("%s", num);

deleteNodeByNum(list, num);

break;

default:

printf("输入错误,无法删除 ");

}

}

//保存到文件

void saveInfoToFile(struct Node* list, char *filePath, char *mode)

{

struct Node* pMove = list->next;

FILE *fp =fopen(filePath, mode);

while (pMove)

{

fprintf(fp, "%s %s %d %d ", pMove->data.name, pMove->data.num, pMove->data.math, pMove->data.english);

pMove = pMove->next;

}

fclose(fp);

}

void readInfoFromFile(struct Node* list, char *filePath, char *mode)

{

struct student data;

while (fscanf(fp, "%s %s %d %d ", data.name, data.num, &data.math, &data.english) !=EOF)

{

insertNodeByHead(list, data);

}

fclose(fp);

}

//交互:按键操作+鼠标操作C语言:按键操作

void keyDown

{

int choice;

struct student stuInfo;

chartemp= ' ';

switch (choice)

{

case 0:

system("pause");

exit(0);

break;

case 1://1.录入信息

while (1)

{

printf("请输入学生的姓名,编号,math,english:");

fflush(stdin);

scanf("%s%s%d%d", stuInfo.name, stuInfo.num, &stuInfo.math, &stuInfo.english);

//链表的插入

insertNodeByHead(list, stuInfo);

printf("是否继续?(N)");

fflush(stdin);

temp = getchar;

if (temp == 'N' ||temp== 'n')

break;

}

break;

case 2://2.显示信息

printList(list);

break;

case 3://3.删除信息

menuOfDelete;

keyDownOfDelete;

break;

case 4://4.查找信息

printf("请输入要查找的学生的姓名:");

scanf("%s", stuInfo.name);

if (findByName(list, stuInfo.name) != NULL)

{

printf("%s %s %d %d ", findByName(list, stuInfo.name)->data.name,

findByName(list, stuInfo.name)->data.num, findByName(list, stuInfo.name)->data.math,findByName(list, stuInfo.name)->data.english);

}

else

{

printf("未找到相关信息! ");

}

break;

case 5://5.保存到文件

saveInfoToFile(list,"1.txt", "w");

break;

default:

printf("输入错误,重新输入 ");

break;

}

}

int main

{

readInfoFromFile(list, "1.txt", "r");

while (1)

{

menu;

keyDown;

system("pause");

system("cls");

}

return 0;

}

和大家说了这么多,并不是告诉大家我的技术有多么多么的牛,而是想告诉大家,只要你有决心和意志,要好学C/C++并没那么难。要混口饭吃也不是这么难哦。


http://lihuaxi.xjx100.cn/news/275955.html

相关文章

项目开发过程中的收获与思考

2013年7月,我正式毕业了,到公司入职,也就正式成为了一名菜鸟程序员。到今天,2014年1月3日,目前主要的工作是公司一个项目中的一个功能模块,到我进入项目组算起,已经过了四个月了。因此&#xff…

改善深度学习训练的trick总结 | CSDN博文精选

扫码参与CSDN“原力计划”作者 | ZesenChen来源 | CSDN博客精选在深度学习中,同样一个模型用不同的初始化,数据处理,batch size,学习率,优化器都能得到不同性能的参数。我根据自己参与过的比赛中经常用到的一些trick进…

如何使用C++ Builder 6.0连接Access数据库

本文假定所需连接的Access数据库为db_restaurant,如何连接db_restaurant,现在将拉开帷幕。 首先,通过使用“File→New→Data Module”创建一个用于连接数据 库的窗体。然后,在“ADO”选项卡下选择“ADOConnection”控件与 “ADOQu…

导师:学CV的不懂目标检测?那你别学了

作为计算机视觉中的核心任务之一,在智能视频监控、自动化检测、工业检测等领域应用中目标检测发挥了巨大的作用。同时,随着深度学习的广泛应用,目标检测的精确度和效率都得到了较大的提升,但基于深度学习的目标检测仍面临着改进与…

Java 数据持久化系列之池化技术

点击上方“方志朋”,选择“设为星标”回复”666“获取新整理的面试资料在上一篇文章Java 数据持久化系列之JDBC中,我们了解到使用 JDBC 创建 Connection 可以执行对应的SQL,但是创建 Connection 会消耗很多资源,所以 Java 持久化框…

怎么把线稿提取出来_抠线稿,三种提取漫画线稿的方式

看到好看的漫画,就会想要不要画出来,但是又不太会画画,这时呢,就可以借助我们经常用到的PS,把它的线稿提取出来,线稿提取出来后,想要模仿画画就比较简单了,如果还觉得难,…

c语言中小数乘法怎样写程序,四年级下册lbrack;小数乘法rsqb;知识点归纳

与《四年级下册[小数乘法]知识点归纳》相关的范文北师大版小学数学一年级(上册)知识点归纳 本册教材的教学内容 1 北师大版一年级数学(下册)知识点 一年级下册知识领域及结构图 一. 生活中 的数 三.加减法 (一) 数与代数 (二) (三) 空间与图形 图形 统计与…

我收集了12款自动生成器,无聊人士自娱自乐专用

整理 | Jane出品 | AI科技大本营(ID:rgznai100)【导语】此前,AI科技大本营为大家介绍一个火爆文章生成器系统 BullshitGenerator,专以生成各种奇葩、“狗屁不通”的文章,还因此上了微博热搜,只要…