C语言学生信息管理系统实验报告.docx

上传人:jian****018 文档编号:7926502 上传时间:2020-03-25 格式:DOCX 页数:23 大小:163.08KB
返回 下载 相关 举报
C语言学生信息管理系统实验报告.docx_第1页
第1页 / 共23页
C语言学生信息管理系统实验报告.docx_第2页
第2页 / 共23页
C语言学生信息管理系统实验报告.docx_第3页
第3页 / 共23页
点击查看更多>>
资源描述
C语言课程设计 学生信息管理系统 姓 名 洪伟生 院 系 计 算 机 学 院 日 期 2015 年 7 月 5 日 目 录第一章 设计要求 第二章 算法分析1. 理论依据2. 主要实现方法2.1 整体流程图2.2 函数功能和函数之间的调用关系第三章 代码(源代码)第四章 分析说明第五章 总结第一章、 设计要求1、利用所学的知识、理论和实际结合,利用资源,采用模块化的结构,使用模仿修改自主设计相结合的方法,锻炼学生综合分析解决实际问题的编程能力;2、通过C语言各个函数功能来实现对学生信息的管理,学生信息包括学生姓名,学号,各科成绩;管理方式包括对学生信息的录入,保存,排序,查找、修改、删除等功能。第二章、 算法分析1、程序理论依据通过C语言的程序设计基础的掌握,对学生成绩管理系统进行编写程序。首先,通过链表这一数据结构来对学生的信息进行录入以及操作,在其过程中,通过各个功能语句以及选择结构,循环结构等方式的结合来达到所要实现的程序功能。最后通过对C语言中对文件的操作,对已有学生成绩的读取和新建学生成绩的录入保存。2、主要实现方法2.1整体流程图学生信息管理系统学生信息删除返回主菜单学生信息增加学生信息修改学生信息查找学生信息浏览学生信息录入进入退出2.2、函数功能和函数之间的调用关系2.2.1、函数功能:void Menu_1(); /主菜单void Menu_2(); /二级菜单void swap(struct student * phead,struct student * pback); / 链表节点互换void Save(struct student * head); / 写入磁盘void Search(struct student * head); / 查找学生信息void Read(struct student * head); / 显示学生信息void Sort(struct student * head); / 链表节点排序struct student * Create(); / 学生信息手动录入struct student * Readpoint(); / 磁盘文件写入内存struct student * Modify(struct student * head); / 链表结构体成员修改struct student * Add(struct student * head); / 链表节点插入struct student * Delete(struct student * head); / 链表节点删除 2.2.2、函数之间的调用关系:通过switch语句进行指令选择:case 1: 学生信息录入 调用函数 Create( )、Save( )、Menu_1( )、Menu_2( ) case 2: 学生信息浏览调用函数 Readpoint( )、Sort( )、Read( )、Save( )、Menu_1( )、Menu_2( ) case 3: 学生信息查找 调用函数 Search( )、Readpoint( )、Menu_1( )、Menu_2( )case 4: 学生信息修改 调用函数 Modify( )、Readpoint( )、Save( )、Menu_1( )、Menu_2( ) case 5: 学生信息增加调用函数 Add( )、 Readpoint( )、Save( )、Menu_1( )、Menu_2( ) case 6: 学生信息删除调用函数 Delete( ) 、Readpoint( )Save( )、Menu_1( )、Menu_2( ) case 0: 返回主菜单调用函数 Menu_1( )第三章、 代码(源代码)/* 学生信息管理系统*/#include#include#includestruct student /定义结构体int num;char name24;char sex5;int Chinese;int Math;int English;struct student * next;void Menu_1(); /主菜单void Menu_2(); /二级菜单void swap(struct student * phead,struct student * pback); / 链表节点互换void Save(struct student * head); / 写入磁盘void Search(struct student * head); / 查找学生信息void Read(struct student * head); / 显示学生信息void Sort(struct student * head); / 链表节点排序struct student * Readpoint(); / 磁盘文件写入内存struct student * Create(); /学生信息手动录入struct student * Modify(struct student * head); / 链表结构体成员修改struct student * Add(struct student * head); / 链表节点插入struct student * Delete(struct student * head); / 链表节点删除int main(void)Menu_1(); return 0;void Menu_1()int num;printf(tttt 学生信息管理系统ttttn);printf(ttt 1: 进入学生信息管理n); /主菜单printf(ttt 0: 退出学生信息管理n);printf(请您输入指令:);scanf(%d,&num);switch(num)case 1:Menu_2();break;default:printf(-您已退出学生信息管理系统-n);break;/*-*/void Menu_2() struct student * head;int num;printf(ttt 欢迎进入n);printf(-n);printf(ttt 1: 学生信息录入n);printf(ttt 2: 学生信息浏览n);printf(ttt 3: 学生信息查找n);printf(ttt 4: 学生信息修改n); /二级菜单printf(ttt 5: 学生信息增加n);printf(ttt 6: 学生信息删除n);printf(ttt 0: 返回主菜单n);printf(-n);printf(请您输入指令:);scanf(%d,&num);switch(num)case 1: head = Create(); Save(head);printf(n);printf(ttt 1: 返回主菜单n); /手动录入学生数据printf(ttt 2: 返回二级菜单n);printf(n);printf(请您输入指令:);scanf(%d,&num);switch(num)case 1:Menu_1();break;case 2:Menu_2();break;default :printf(输入无效,返回二级菜单!n);Menu_2();break; break;case 2:head = Readpoint(); /写入链表,返回头指针Sort(head);printf(ttt 以学号升序排列n);Read(head); / 链表数据写入文件Save(head);printf(n);printf(ttt 1: 返回主菜单n);printf(ttt 2: 返回二级菜单n);printf(n);printf(请您输入指令:);scanf(%d,&num);switch(num)case 1:Menu_1();break;case 2:Menu_2();break;default :printf(输入无效,返回二级菜单!n);Menu_2();break; break;case 3:head = Readpoint();Search(head);/查找学生信息printf(n);printf(ttt 1:返回主菜单n);printf(ttt 2:返回二级菜单n);printf(n);printf(请您输入指令:);scanf(%d,&num);switch(num)case 1:Menu_1();break;case 2:Menu_2();break;default :printf(输入无效,返回二级菜单!n);Menu_2();break; break;case 4:head = Readpoint();Modify(head);/修改结构体成员并保存到文件Save(head);printf(n);printf(ttt 1: 返回主菜单n);printf(ttt 2: 返回二级菜单n);printf(n);printf(请您输入指令:);scanf(%d,&num);switch(num)case 1:Menu_1();break;case 2:Menu_2();break;default :printf(输入无效,返回二级菜单!n);Menu_2();break; break;case 5:head = Readpoint();Add(head);/增加学生信息并保存到文件Save(head);printf(n);printf(ttt 1:返回主菜单n);printf(ttt 2:返回二级菜单n);printf(n);printf(请您输入指令:);scanf(%d,&num);switch(num)case 1:Menu_1();break;case 2:Menu_2();break;default :printf(输入无效,返回二级菜单!n);Menu_2();break; break;case 6:head = Readpoint(); head = Delete(head);/删除学生信息并保存到文件Save(head);printf(n);printf(ttt 1:返回主菜单n);printf(ttt 2:返回二级菜单n);printf(n);printf(请您输入指令:);scanf(%d,&num);switch(num)case 1:Menu_1();break;case 2:Menu_2();break;default :printf(输入无效,返回二级菜单!n);Menu_2();break; break;case 0: Menu_1();break;default :printf(请重新输入n);Menu_2(); break;/*-*/struct student * Create() /学生信息手动录入 struct student *head,* p,* q;int n;p = q = (struct student *)malloc(sizeof(struct student);printf(请输入学生的姓名、学号、性别、语文成绩、高等数学成绩、英语成绩:n);scanf(%s,q-name);scanf(%d %s %d %d %d,&q-num,&q-sex,&q-Chinese,&q-Math,&q-English); n = 0; head =NULL;while (q-num != 0)n = n+1;if (n = 1)head = q;elsep-next = q;p = q;q = (struct student *)malloc(sizeof(struct student);scanf(%s,q-name);scanf(%d %s %d %d %d,&q-num,q-sex,&q-Chinese,&q-Math,&q-English);p-next = NULL;printf(学生信息录入成功!n);return head;/*-*/struct student * Readpoint() /学生信息写入内存,便于操作FILE * fp1; struct student *head,* p,* q;int n;if(fp1 = fopen(E:test.txt,rb) = NULL) printf(open file error!n);exit(0);p = q = (struct student *)malloc(sizeof(struct student);fscanf(fp1,%s %d %s %d %d %d,q-name,&q-num,q-sex,&q-Chinese,&q-Math,&q-English);n = 0;head =NULL;while( !feof(fp1)n = n+1;if (n = 1)head = q;elsep-next = q;p = q;q = (struct student *)malloc(sizeof(struct student);fscanf(fp1,%s %d %s %d %d %d,&q-name,&q-num,&q-sex,&q-Chinese,&q-Math,&q-English);p-next = NULL;fclose(fp1);return head;/*-*/void Swap(struct student * phead, struct student * pback) /链表元素数据交换struct student * temp = (struct student *)malloc(sizeof(struct student);strcpy(temp-name,phead-name);temp-num = phead-num;strcpy(temp-sex,phead-sex);temp-Chinese = phead-Chinese;temp-Math = phead-Math;temp-English = phead-English; strcpy(phead-name,pback-name);phead-num= pback-num;strcpy(phead-sex,pback-sex);phead-Chinese = pback-Chinese;phead-Math = pback-Math;phead-English = pback-English; strcpy(pback-name,temp-name);pback-num = temp-num;strcpy(pback-sex,temp-sex);pback-Chinese = temp-Chinese;pback-Math = temp-Math;pback-English = temp-English;free(temp);/*-*/void Sort(struct student * head) / 学号排序 struct student * phead = (struct student *)malloc(sizeof(struct student);struct student * pback = (struct student *)malloc(sizeof(struct student); phead = head;while (phead)int Num = phead-num;pback = phead-next;while(pback) if( Num pback-num)Swap(phead,pback);Num = phead-num;pback = pback-next; phead = phead-next;/*-*/void Read(struct student * head) /学生信息读取 struct student * p;p = head;printf(-n);printf(学生的姓名 、 学号 、 性别 、语文成绩 、 高等数学成绩 、 英语成绩:n);while(p != NULL)printf( %s t%dt%s t %d t %d tt %dn,p-name,p-num,p-sex,p-Chinese,p-Math,p-English);p = p-next;printf(-n);/*-*/void Save(struct student * head) /学生信息保存到文件struct student * p;FILE * fp;if(fp = fopen(E:test.txt,wb) = NULL) printf(open file error!n);exit(0);p = head;while(p !=NULL)fprintf(fp,%s %d %s %d %d %d,p-name,p-num,p-sex,p-Chinese,p-Math,p-English);fprintf(fp,%s,rn);p = p-next;fclose(fp);/*-*/void Search(struct student * head) /学生信息查找int n;struct student * p;char name24;int num;char sex5;int Chinese;int Math;int English;printf(您想以何种方式进行查找:n);printf(1;姓名n);printf(2:学号n);printf(3:性别n);printf(4:语文成绩n);printf(5:数学成绩n);printf(6:英语成绩n);printf(0:返回二级菜单n); scanf(%d,&n);switch(n)case 1:printf(请输入姓名:); /按姓名查找scanf(%s,name);p = head;while(strcmp(name,p-name)!=0 & p-next != NULL)p = p-next;if(strcmp(name,p-name)=0)printf(%s %d %s %d %d %dn,p-name,p-num,p-sex,p-Chinese,p-Math,p-English);elseprintf(查无此人!n); break;case 2:printf(请输入学号:); /按学号查找scanf(%d,&num);p = head;while(num != p-num & p-next != NULL)p = p-next;if(num = p-num)printf(%s %d %s %d %d %dn,p-name,p-num,p-sex,p-Chinese,p-Math,p-English);elseprintf(查无此人!n); break; case 3:printf(请输入性别:); /按性别查找scanf(%s,sex);p = head;while(p!= NULL)if(strcmp(sex,p-sex)=0)printf(%s %d %s %d %d %dn,p-name,p-num,p-sex,p-Chinese,p-Math,p-English);p = p-next; break;case 4:printf(请输入语文成绩:); /按语文成绩查找scanf(%d,&Chinese);p = head;while(p!= NULL)if(Chinese = p-Chinese)printf(%s %d %s %d %d %dn,p-name,p-num,p-sex,p-Chinese,p-Math,p-English);p = p-next; break; case 5:printf(请输入高等数学成绩:); /按高等数学成绩查找scanf(%d,&Math);p = head;while(p!= NULL)if(Math = p-Math)printf(%s %d %s %d %d %dn,p-name,p-num,p-sex,p-Chinese,p-Math,p-English);p = p-next; break; case 6:printf(请输入英语成绩:); /按英语成绩查找scanf(%d,&English);p = head;while(p!= NULL)if(English = p-English)printf(%s %d %s %d %d %dn,p-name,p-num,p-sex,p-Chinese,p-Math,p-English);p = p-next; break; default:printf(指令错误返回二级菜单!n);Menu_2();break;/*-*/struct student * Modify(struct student * head) int n;struct student * p;char name24;int num;printf( 您想以何种方式进行修改:n);printf(1;姓名n);printf(2:学号n);printf(0:返回二级菜单n);scanf(%d,&n);switch(n)case 1:printf(请输入姓名:); /按姓名查找后修改信息scanf(%s,name);p = head;while(strcmp(name,p-name)!=0 & p-next != NULL)p = p-next;if(strcmp(name,p-name)=0)scanf(%s %d %s %d %d %d,p-name,&p-num,p-sex,&p-Chinese,&p-Math,&p-English);printf(修改后:n);printf(%s %d %s %d %d %dn,p-name,p-num,p-sex,p-Chinese,p-Math,p-English);elseprintf(查无此人!n); break;case 2:printf(请输入学号:);/按学号查找后修改信息scanf(%d,&num);p = head;while(num != p-num & p-next != NULL)p = p-next;if(num = p-num)scanf(%s %d %s %d %d %d,p-name,&p-num,p-sex,&p-Chinese,&p-Math,&p-English);printf(修改后:n);printf(%s %d %s %d %d %dn,p-name,p-num,p-sex,p-Chinese,p-Math,p-English);elseprintf(查无此人!n); break; default:printf(指令错误,返回二级菜单!n);Menu_2();break;return head;struct student * Add(struct student * head)/增加学生信息struct student * p,* q; /为增加的学生分配内存 struct student * add = (struct student *)malloc(sizeof(struct student );scanf(%s %d %s %d %d %d,add-name,&add-num,add-sex,&add-Chinese,&add-Math,&add-English);q = head; if(head = NULL)head = add; /空表插入add-next = NULL;elsewhile(add-num q-num) & (q-next != NULL) /指向下个节点p = q;q = q-next;if(add-num num) /插到首节点if (head = q)head =add;elsep-next = add; /插到中间节点add-next = q;elseq-next = add; /插到尾节点add-next = NULL; return head;struct student * Delete(struct student * head) /删除学生信息 int n;struct student * p,* q;char name24;int num;printf( 您想以何种方式进行删除:n);printf(1;姓名n);printf(2:学号n);printf(0:返回二级菜单n);scanf(%d,&n);switch(n)case 1:printf(请输入姓名:); /按姓名查找并删除scanf(%s,name);p = head;while(strcmp(name,p-name)!=0 & p-next != NULL)q = p;p = p-next;if ( p = head) /删除首节点 head = p-next;p-next = NULL;else if(strcmp(name,p-name)=0)q-next = p-next; /删除中间节点p-next = NULL;elseprintf(查无此人!n); break;case 2:printf(请输入学号:); /按学号查找并删除scanf(%d,&num);p = head;while(num != p-num & p-next != NULL)q = p;p = p-next;if(p = head)head = p-next;p-next = NULL;else if(num = p-num)q-next = p-next;p-next = NULL;elseprintf(查无此人!n); break; default:printf(指令错误,返回二级菜单!n);Menu_2();break;return head;程运行结果:第四章、 分析说明学生管理系统主要利用 链表 这一数据结构,通过文件的写入(fprintf函数)、写出(fscanf函数) 来对数据进行读取进而进行操作以及储存学生信息,以及利用switch语句的特点完成用户与机器间的交互操作,符合实际需要。第五章、 总结学生信息管理系统虽然是个小程序,但其中也体现了一定的结构化思想,对于编程也是用一定用处的。
展开阅读全文
相关资源
相关搜索

当前位置:首页 > 管理文书 > 工作总结


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!