1.题目与要求

1.1问题提出

设计学生成绩管理系统,有N个学生,每个学生的数据包含姓名、年龄、编号和籍贯,试设计一学生管理系统

1.2本系统涉及的知识点

C语言文件操作、数组、函数、链表、头插法、尾插法等等

1.3 功能要求

1、学生信息录入:输入学生的姓名、年龄、编号和籍贯;

2、信息查询:(至少一种查询方式)。按编号查询学生记录,或查询同名学生的记录;

3、信息修改与删除:能够对学生的信息进行一定的修改和删除,存入表单。

4、退出系统:退出整个系统(即主菜单);

1.4 根据所选菜单编写相应代码(略)

1.5 功能效果图(以代码实际效果为准)

「C语言期末作业」学生管理系统核心源码!需要请自行领取插图

二、管理系统源码与注释展示

define_CRT_SECURE_NO_WARNINGSincludeincludeincludestructMM{charname[20];intage;intnum;charaddr[20]; };//只需要修改和数据有关东西structNode{//int data;structMMdata;structNode*next;};structNode*list=NULL;//1.创建表头:描述最初状态struct Node*createList(){//创建链表就是创建表头//创建表头就是创建结构体变量structNode*headNode= (structNode*)malloc(sizeof(structNode));//表头不给数据初始化headNode->next =NULL;returnheadNode; }//2.创建节点,为插入做准备:把数据加工成节点struct Node*createNode(struct MM data){structNode*newNode= (structNode*)malloc(sizeof(structNode));newNode->data = data; newNode->next =NULL;returnnewNode; }//3.表头法插入voidinsertByHead(struct Node* headNode, struct MM data){//插入之前首先要创建节点structNode*newNode=createNode(data);newNode->next = headNode->next; headNode->next = newNode; }voiddeleteAppoinByName(struct Node* headNode,char*name){//相邻的两个指针structNode*posFrontNode=headNode;structNode*posNode=headNode->next;//找指定位置while(posNode !=NULL&&strcmp(posNode->data.name, name)) { posFrontNode = posNode;//下面两句一样的功能posNode = posFrontNode->next;//posNode=posNode->next}//分析查找的结果//循环退出有两种情况:posNode==NULL ,posNode->data==posData;if(posNode ==NULL) {printf(“未找到指定无法删除!\n”);return; }else//posNode->data==posData;{ posFrontNode->next = posNode->next;free(posNode); posNode =NULL; } }voiddeleteAppoinByAge(struct Node* headNode,intage){//相邻的两个指针structNode*posFrontNode=headNode;structNode*posNode=headNode->next;//找指定位置while(posNode !=NULL&&posNode->data.age != age) { posFrontNode = posNode;//下面两句一样的功能posNode = posFrontNode->next;//posNode=posNode->next}//分析查找的结果//循环退出有两种情况:posNode==NULL ,posNode->data==posData;if(posNode ==NULL) {printf(“未找到指定无法删除!\n”);return; }else//posNode->data==posData;{ posFrontNode->next = posNode->next;free(posNode); posNode =NULL; } }//查找函数struct Node*searchByName(struct Node* headNode,char*name){structNode*pMove=headNode;while(pMove !=NULL&&strcmp(pMove->data.name, name)) { pMove = pMove->next; }returnpMove; }struct Node*searchByAge(struct Node* headNode,intage){structNode*pMove=headNode;while(pMove !=NULL&&pMove->data.age != age) { pMove = pMove->next; }returnpMove; }voidprintList(struct Node* headNode){structNode*pMove=headNode->next;//因为有表头,所以打印是表头的下一个开始打印printf(“姓名\t年龄\t编号\t籍贯\n”);while(pMove !=NULL) {//printf(“%d\t”, pMove->data);printf(“%s\t%d\t%d\t%s\n”, pMove->data.name, pMove->data.age, pMove->data.num, pMove->data.addr); pMove = pMove->next; }printf(“\n”);//调整打印结果}//打印所有相同名字的信息voidprintListName(struct Node* headNode,char*name){structNode*pMove=headNode->next;//因为有表头,所以打印是表头的下一个开始打印printf(“姓名\t年龄\t编号\t籍贯\n”);while(pMove !=NULL) {//printf(“%d\t”, pMove->data);if(strcmp(pMove->data.name,name)==0)printf(“%s\t%d\t%d\t%s\n”, pMove->data.name, pMove->data.age, pMove->data.num, pMove->data.addr); pMove = pMove->next; }printf(“\n”);//调整打印结果}//特殊需求需要写特殊代码//删除功能:删除所有相同姓名的人voiddeleteByName(struct Node* headNode,char*name){while(searchByName(headNode, name) !=NULL) { deleteAppoinByName(headNode, name); } }voiddeleteByAge(struct Node* headNode,intage){while(searchByAge(headNode, age) !=NULL) { deleteAppoinByAge(headNode, age); } }//文件操作//读操作voidreadInfoFromFile(struct Node* headNode,char*fileName){ FILE *fp = fopen(fileName,“r”);if(fp ==NULL) { fp = fopen(fileName,“w+”); }structMMinfo;while(fscanf(fp,“%s\t%d\t%d\t%s\n”, info.name, &info.age, &info.num, info.addr) != EOF) { insertByHead(headNode, info); } fclose(fp); }//写操作voidsaveInfoToFile(struct Node* headNode,char*fileName){ FILE *fp = fopen(fileName,“w”);structNode*pMove=headNode->next;while(pMove !=NULL) {fprintf(fp,“%s\t%d\t%d\t%s\n”, pMove->data.name, pMove->data.age, pMove->data.num, pMove->data.addr); pMove = pMove->next; } fclose(fp); }voidmenu(){printf(“———【学生管理系统】———-\n”);printf(“\t0.退出系统!\n”);printf(“\t1.登记学生信息!\n”);printf(“\t2.浏览学生信息!\n”);printf(“\t3.查找学生信息!\n”);printf(“\t4.封印学生信息!\n”);printf(“\t5.修改学生信息\n”);printf(“\t6.删除所有相同姓名的学生信息\n”);printf(“———————————-\n”);printf(“请输入(0~5):”); }voidkeyDown(){intchoice =0;structMMdata;structNode*result=NULL;scanf(“%d”, &choice);switch(choice) {case0:printf(“退出成功!\n”); system(“pause”);exit(0);break;case1:printf(“请输入(name,age,num,addr):”);scanf(“%s%d%d%s”, data.name, &data.age, &data.num, data.addr); insertByHead(list, data); saveInfoToFile(list,“1.txt”);break;case2: printList(list);break;case3:printf(“请输入要查询的学生的姓名:”);scanf(“%s”, data.name); result = searchByName(list, data.name);if(result ==NULL) {printf(“未找到相关信息!\n”); }else{printf(“姓名\t年龄\t编号\t籍贯\n”);printf(“%s\t%d\t%d\t%s\n”, result->data.name, result->data.age, result->data.num, result->data.addr); }break;case4:printf(“请输入要封印的学生信息:”);scanf(“%s”, data.name); deleteAppoinByName(list, data.name); saveInfoToFile(list,“1.txt”);break;case5:printf(“请输入要修改的学生的姓名:”);scanf(“%s”, data.name); result = searchByName(list, data.name);if(result ==NULL) {printf(“未找到相关信息!,无法修改\n”); }else{printf(“请输入新的信息(name,age,num,addr):”);scanf(“%s%d%d%s”, result->data.name, &result->data.age, &result->data.num, result->data.addr);printf(“修改成功!\n”); saveInfoToFile(list,“1.txt”); }break;case6:printf(“请输入要删除的学生的姓名:”);scanf(“%s”, data.name); deleteByName(list, data.name); saveInfoToFile(list,“1.txt”);break;default:printf(“输入错误!\n”);break; } }intmain(){list= createList(); readInfoFromFile(list,“1.txt”);while(1) { menu(); keyDown(); system(“pause”); system(“cls”); } system(“pause”);return0; }

本次的分享到这里了!源码大家可以直接复制获取~不过可能会因为编译原因导致乱码,建议大家重新写一遍,也可以加深自己的学习映像!如果大家在学习C语言C++的时候有什么学习上的问题的话,可以来和我一起↓↓↓交流学习哦~

编程学习书籍分享:

「C语言期末作业」学生管理系统核心源码!需要请自行领取插图1

编程学习视频分享:

「C语言期末作业」学生管理系统核心源码!需要请自行领取插图2

另外,对我们来说还是学编程重要!栽一棵树好的时间是十年前,其次是现在。对于准备学习编程的小伙伴,如果你想更好地提升你的编程核心能力(内功)不妨从现在开始!

整理分享(多年学习的源码、项目实战视频、项目笔记,基础入门教程)

欢迎转行和学习编程的伙伴,利用更多的资料学习成长比自己琢磨更快哦!

点击下方【了解更多】获取更多学习资料帮助你学习成长哦~

作者 nasiapp

在线客服
官方客服
我们将24小时内回复。
12:01
您好,有任何疑问请与我们联系!

选择聊天工具: