网站建设的重要做羞羞事网站

当前位置: 首页 > news >正文

网站建设的重要,做羞羞事网站,模板网站外链做不起来,河北网站制作公司报价前言 在我们实现学生信息管理系统的过程中#xff0c;我们几乎会使用到C语言最常用最重要的知识#xff0c;对于刚学习完C语言的同学来说是一次很好的巩固机会#xff0c;其中还牵扯到数据结果中链表的插入和删除内容。 实现学生信息管理系统 文件的创建与使用 对于要实现…前言 在我们实现学生信息管理系统的过程中我们几乎会使用到C语言最常用最重要的知识对于刚学习完C语言的同学来说是一次很好的巩固机会其中还牵扯到数据结果中链表的插入和删除内容。 实现学生信息管理系统 文件的创建与使用 ·对于要实现一个大项目而言我们要把函数进行分装分装到头文件中在.c文件中使用 #include//头文件名 另外对于定义函数时还可以专门的放在另一个.c文件中便于维护在这个小项目中当然不用这样做不过为了养成好习惯建议大家这样做。 头文件的使用 #includestdio.h #includestdlib.h #includeconio.h创建存储学生信息结构体和节点信息结构体 //学生信息 typedef struct _Student {int stuNum;char name[30];int source; }Student;//节点信息 typedef struct _Node {Student student;struct _Node* next; }Node;系统界面的初始化 //初始化界面 void welcome() {printf(********************************\n);printf(\t学生成绩管理系统\t\n);printf(******************************\n);printf(\t请选择功能列表\t\t\n);printf(******************************\n);printf(\t1.录入学生信息\t\t\n);printf(\t2.打印学生信息\t\t\n);printf(\t3.统计学生信息\t\t\n);printf(\t4.查找学生信息\t\t\n);printf(\t5.修改学生信息\t\t\n);printf(\t6.删除学生信息\t\t\n);printf(\t7.按成绩排序\t\t\n);printf(\t8.退出系统\t\t\n);printf(*******************************\n); } 输入学生信息 //输入学生信息 void inputStudent(Node head) {Node* fresh (Node)malloc(sizeof(Node));fresh-next NULL;printf(请输入学生的学号、姓名、成绩);scanf(%d %s %d, fresh-student.stuNum, fresh-student.name, fresh-student.source);Node move head;while (move-next ! NULL){move move-next;}//将学生信息插入链表尾部move-next fresh;saveStudent(head);//学生信息持久化函数自定义 }
打印学生信息 //打印学生信息 void printStudent(Node* head) {Node* move head-next;while (move ! NULL){printf(学号%d 姓名%s 成绩%d\n, move-student.stuNum, move-student.name, move-student.source);move move-next;}//暂停程序system(pause); //清空控制台system(cls); } 统计学生人数 //统计学生人数 void countStudent(Node* head) {welcome();int count 0;Node* move head-next;while (move ! NULL){count;move move-next;}printf(学生的总人数为%d, count);//暂停程序system(pause); //清空控制台system(cls); } 查找学生信息 void findStudent(Node* head) {welcome();int stuNum;printf(\n请输入要查找的学生的学号);scanf(%d, stuNum);Node* move head-next;while (move ! NULL){if (stuNum move-student.stuNum){printf(学号%d 姓名%s 成绩%d\n, move-student.stuNum, move-student.name, move-student.source);return;}move move-next;}printf(未找到学生信息\n);//暂停程序system(pause); //清空控制台system(cls); } 学生信息持久化 //学生信息持久化 void saveStudent(Node* head) {FILE* file fopen(./stu.info, w);if (file NULL){printf(文件打开失败\n);return;}Node* move head-next;while (move ! NULL){if ((fwrite(move-student, sizeof(Student), 1, file)) ! 1){printf(写入失败\n);return;}move move-next;}fclose(file); } 读取学生信息 //读取学生信息 void loadStudent(Node* head) {FILE* file fopen(./stu.info, r);if (!file){printf(没有学生文件跳过读取\n);return;}Node* fresh (Node)malloc(sizeof(Node));fresh-next NULL;Node move head;while (fread(fresh-student, sizeof(Student), 1, file) 1){move-next fresh;move fresh;fresh (Node)malloc(sizeof(Node));fresh-next NULL;}free(fresh);fclose(file);printf(读取成功\n); } 修改学生信息 //学生信息修改 void modifyStudent(Node head) {welcome();printf(请输入要修改信息学生的学号);int stuNum;scanf(%d, stuNum);Node* move head-next;while (move ! NULL){if (stuNum move-student.stuNum){printf(请输入学生的姓名、成绩\n);scanf(%s %d, move-student.name, move-student.source);saveStudent(head);printf(修改成功\n);return;}move move-next;//暂停程序system(pause); //清空控制台system(cls);}printf(未找到学生信息\n); } 删除学生信息 //删除学生信息 void deleteStudent(Node* head) {welcome();int stuNum;printf(请输入要删除学生信息的学号);scanf(%d, stuNum);Node* move head;while (move-next ! NULL){if (move-student.stuNum stuNum){Node* tmp move-next;//把要删除的数据的保存的节点存放在一个临时节点中防止前后节点丢失move-next move-next-next;free(tmp);tmp NULL;saveStudent(head);printf(删除成功\n);return;}move move-next;}//暂停程序system(pause); //清空控制台system(cls); } 链表的删除操作 由于没学到数据结构这个只是我浅薄的认识。 对学生成绩进行排序 //对学生成绩排序 void sortStudent(Node* head) {welcome();Node* move NULL;Node* save NULL;for (Node* turn head-next; turn-next ! NULL; turn turn-next){for (Node* move head-next; move-next ! save; move move-next){if (move-student.source move-next-student.source){Student temp move-student;move-student move-next-student;move-next-student temp;}}save move;//下一趟排序不用再次比较已经排序好的最大值}printStudent(head);//暂停程序system(pause); //清空控制台system(cls); } 冒泡排序 冒泡排序是在一趟一趟的过程中对相邻元素比较大小进行排序例如我们进行升序排序在每一趟的过程中会把这一趟的最大元素排到最前面进而进行下一趟排序周而复始知道最后一趟的相邻元素大小符合升序排列。 在其中排序的过程中由于在每一趟中我们会把最大数排列在随后所以在以后的每一次排序中都不必要对上一趟排序后结果的最大值进行比较例如 对于这个算法的实现请看下面 退出系统以及在main函数中调用这些函数 int main() {Node* head (Node*)malloc(sizeof(Node));head-next NULL;loadStudent(head);welcome();while(1){char c _getch();switch ©{case 1: inputStudent(head);break;case 2:printStudent(head);break;case 3:countStudent(head);break;case 4:findStudent(head);break;case 5:modifyStudent(head);break;case 6:deleteStudent(head);break;case 7:sortStudent(head);break;case 8:printf(\n欢迎下次使用,bye-);exit(0);break;default:printf(请重新输入\n);break;}}return 0; } 退出系统 总结 对于前面的函数实现而言大多数代码的思路是相同的对于学生信息的删除和成绩排序需要我们重点理解愿与诸君共勉