




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、 数据结构课外实践 数据结构课外实践报告 项 目 名 称: 学生数据结构成绩管理系统 所 在 班 级: 2012级软件工程 小 组 成 员: 指 导 教 师: 起 止 时 间: 项目基本信息项目名称学生数据结构成绩管理系统项目简介(1)学生信息及成绩的录入要求包括的学生信息有:学号、姓名、性别、民族、数据结构、线性代数、概率统计成绩(至少录入10名以上学生)所录入的学生按学号散列存储(散列函数为:学号%5 取整,如 1002%5 =2),采用拉链法解决冲突。(2)学生成绩的查询和修改要求根据提供的学号、姓名完成学生成绩的查询,或者插入,删除学生的信息 (3)学生成绩的分段统计和排序输出统计出各
2、分数段学生人数(60分以下,6070,7180,.),以及学生平均成绩的输出(4)学生成绩的显示以及排名(排名有单科成绩和总成绩排名)小组成员任务分工课外实践评定成绩记录指导教师意见系统完成情况:优 良 中 差报告完成情况:优 良 中 差答辩评定成绩团队整体成绩:综 合 成 绩一、系统简介设计一个基于结构体数组的学生学籍管理系统,能实现对学生学籍信息进行录入、修改、查询和输出等基本操作。二、需求分析学籍管理系统应实现以下功能:1、能录入学生的基本信息,包括学号、姓名、性别和,保存到结构体数组中。2、能根据输入的学号查找学生,进行信息的修改。3、能根据输入的学号从结构体数组中学生的记录。4、实现
3、查询功能,能根据输入的学号或年级在屏幕上显示相应的学生信息。5、能在屏幕上以列表的方式输出所有学生的信息。三、概要设计1、系统功能结构图根据项目的开发要求,本系统划分成六个主功能模块:录入学生信息模块、修改学生信息模块、查询信息模块、输出模块和系统退出模块。系统功能结构图如下:学生档案管理系统查询学生信息输出学生信息修改学生信息录入学生信息删除学生信息录入学生信息退出系统按学号查询按姓名查询2、重要数据的数据结构设计学生学籍的记录项用结构体stumessage 表示,包括6个属性,stuno、name、spec、grade、sex、birthday 分别代表学生的学号、姓名、专业、年级、性别和
4、出生日期,其中 birthday 类型为自定义的结构体类型 date。typedef struct studentlong num; /学号char name20; /姓名char sex20; /性别 char nation20; /民族 int score3; /成绩int sum; /总分 ;3、函数设计学籍管理系统程序采用了结构化程序设计的思想,由1个.h头文件和3个.c源文件组成。程序中除了主函数外,共设计了以下14个函数,分别包含在3个.c源文件中。以下是这些函数的函数原型及功能设计。(1) void sysinfo(void);函数功能:在屏幕上输出系统及版权信息并等待用户响应。
5、(2) void menuofmain(struct stumessage stu);函数功能: 在屏幕上显示主菜单,接收用户选择并响应用户相应操作。(3) void append(struct stumessage stu);函数功能: 录入一条学生记录到记录数组的末尾。(4) void modify(struct stumessage stu);函数功能: 通过输入学号查询学生的相应记录信息,如果存在在屏幕上输出相应学生记录并通过重新输入的方法修改该学生的记录,否则输出没有找到相关记录。(5) void delet(struct stumessage stu);函数功能: 通过输入学号查询
6、学生的相应记录信息,如果存在在屏幕上输出相应学生记录,用户确认删除后调用 dellist() 函数将其删除,否则输出没有找到相关记录。(6) void menuofsear(struct stumessage stu);函数功能: 在屏幕上显示查询子主菜单,接收用户选择并响应用户操作。(7) void listall(struct stumessage stu);函数功能: 在屏幕上以列表方式输出所有学生的信息。调用 printhead() 输出表头,再调用 listone() 函数逐一输出各条记录。(8) void quit(void);函数功能: 退出菜单系统,并调用exit(0) 系统函
7、数结束程序运行。(9) void searnum(struct stumessage stu);函数功能: 通过输入学号调用 numofsear() 函数查询学生的相应记录信息,如果存在调用 printhead() 函数和 listone() 函数在屏幕上输出相应学生记录,否则输出没有找到相关记录。(10) void seargrade(struct stumessage stu);函数功能: 通过输入年级查询学生的相应记录信息,如果存在在屏幕以列表方式输出相应学生记录,并输出统计满足条件的学生个数,否则输出没有找到相关记录。(11) int numofsear(struct stumessa
8、ge stu, char stunum); 函数功能: 根据接收到的学生学号,在相应记录数组中进行查询,如果存在相应记录,返加相应的数组下标,否则返回-1。(12) void printhead(void);函数功能: 在屏幕上显示输出列表的表头。(13) void listone(struct stumessage list);函数功能: 在屏幕上以行的方式显示输出一个学生的相关信息。(14) int dellist(struct stumessage stu, int i);函数功能: 如果数组中存在下标为 i 的记录,删除该记录并返回 1,否则返回 0。4、小组成员分工组员 1main(
9、); systeminfo(); menuofmain(); quit();组员 2printhead(); listone(); listall(); apend();组员 3modify(); delte(); dellist();menuofsear();组员4seranum(); seargrade(); numofsear();四、详细设计1、系统主函数 main()设计开 始直接显示主界面是否建立新系统退出2、 主菜单模块函数 menuofmain() 设计开 始显示主菜单选择择统计分数段显示学生成绩插入学生数据查询学生数据成绩统计排序录入学生信息退出菜单3、录入学生信息功能模块函
10、数 append() 设计4、查询菜单模块函数 menuofsear() 设计清屏查 询查询不符合按姓名查询按学号查询输出查找找结果按指定键返回菜单或继续操作6、按学号查询功能模块函数 searnum() 设计7、按姓名查询功能模块函数 seargrade() 设计清屏输出表头i=0,count=0i0count0count0count0count0count0count0共找到n条记录没有找到相关记录共找到n条记录按任意键继续getch()count08、输出学生信息功能模块函数 listall() 设计 5 测试分析5.1 测试结果1.输入2.查询学生数据3插入学生数据4. 统计各个分数段
11、学生问题总结:1.由于编写代码的时候,中英文格式不同,造成编译错误。 2.括号不匹配,这个是出现次数多的,造成连带错误。 3.变量没有经过定义就在程序中使用(这个错误比较好查找)。 4.引用符号“&”没有写,造成程序编译错误。上述问题有的通过插入断点调试,有的是从头到尾仔细检查一遍,都很好的解决参考文献1 严蔚敏,吴伟民.数据结构. 北京:清华大学出版社,2012.2 谭浩强. c程序设计(第四版)作者:清华大学出版社,2012心得体会通过学生数据结构成绩管理系统这个题目,我们对于编写程序有一个显著的提高,熟练应用结构体,对于程序出现的错误也有了很好的辨认和解决,小组成员在一起更加的团结,更注
12、重合作。在一起解救问题的时候,经过很多的争辩也让我们更加的默契。程序源代码:#include #include #include /动态内存分配的#include /*socket通信,系统头文件*/typedef struct student/ypedef声明新的类型来代替已有的类型的名字,定义一个结构体 studentlong num; /学号char name20; /姓名char sex20; /性别 char nation20; /民族 int score3; /成绩int sum; /总分struct student *next;/student中的一个指针变量student;in
13、t n;student *enter(void); student *sort_1(student *head,int); void print(student *head);student *sort_all(student *head);void find(student *head);student *add_new(student *head);void stats(student *head);student *enter() /录入学生数据int flag; student *head,*p1,*p2;n=0;head=(student *)malloc(sizeof(studen
14、t);p2=head;printf(n请输入第%d名学生的学号,学号为0表示结束输入:,n+1); scanf(%d,&flag);while(getchar()!=n);for(;flag;)n+;p1=(student *)malloc(sizeof(student);p1-num=flag;printf(请输入第%d名学生的姓名:,n);scanf(%s,p1-name); printf(请输入第%d名学生的性别:,n);scanf(%s,p1-sex);printf(请输入第%d名学生的民族:,n);scanf(%s,p1-nation);printf(请输入第%d名学生的数据结构成绩
15、:,n);scanf(%d,&p1-score0);printf(请输入第%d名学生的概率统计成绩:,n);scanf(%d,&p1-score1);printf(请输入第%d名学生的线性代数成绩:,n);scanf(%d,&p1-score2);p1-sum=p1-score0+p1-score1+p1-score2;p2-next=p1;p2=p1;printf(n请输入第%d名学生的学号,没有此学生则输入0表示结束:,n+1); scanf(%d,&flag);p2-next=null;printf(nn);return head;student *sort_all(student *h
16、ead) /学生成绩统计排序int choose;for(;) printf(ntt* * * * 学生成绩统计排序 * * * *n);printf(ttt1.按学生学号排序n);printf(ttt2.按学生总分排序n);printf(ttt3.按学生数据结构成绩排序n);printf(ttt4.按学生概率统计成绩排序n);printf(ttt5.按学生线性代数成绩排序n);printf(ttt6.显示当前学生成绩n);printf(ttt0.返回上一级菜单n);printf(tt* * * * * * * * * * * * * * * * *nn); printf(请输入你要执行的操作
17、:);scanf(%d,&choose);while(getchar()!=n);switch(choose)case 1:case 2:case 3: case 4:case 5:head=sort_1(head,choose);break;case 6:print(head);break;case 0:return head;default: printf(nn您的输入有误!请重新输入:nn);break;student *sort_1(student *head,int choose)student *p1,*p2=head-next,*pm,*px;student mid;if (!p
18、2) return head;for(p1=p2;p1-next!=null;p1=p1-next)pm=p1;for(p2=p1-next;p2!=null;p2=p2-next)switch(choose) case 1:if (pm-nump2-num) pm=p2;break; /按学生学号排序 case 2:if (pm-sumsum) pm=p2;break; /按学生总分排序 case 3:if (pm-score0score0) pm=p2;break; /按学生数据结构成绩排序 case 4:if (pm-score1score1) pm=p2;break; /按学生概率统计
19、成绩排序 case 5:if (pm-score2score2) pm=p2;break; /按学生线性代数成绩排序if(pm!=p1) mid=*pm; *pm=*p1; *p1=mid; px=pm-next; pm-next=p1-next; p1-next=px;printf(n排序后的成绩表为:n);print(head); return head; void find(student *head) /查询学生数据student *p;int choose,fnum;char tem20;if (n=0) printf(n当前系统没有任何学生数据。n );return;for(;)
20、printf(n请输入您要查询学生的方式:nn);printf(1、按学号查询;2、按姓名查询。nn);printf(请选择:);scanf(%d,&choose);while(getchar()!=n);if (choose=1) printf(n请输入你要查询的学生的学号,输入0退出学号查询:);scanf(%d,&fnum);for(;fnum;)for(p=head-next;p!=null&p-num!=fnum;p=p-next);if (!p) printf(nn找不到你要查询的学号,请重新输入,输入0表示结束:);scanf(%d,&fnum);else if (p-num=f
21、num)printf(n学号为%d学生的数据为:n,p-num);printf(学号t姓名t性别t民族t语文成绩 数学成绩 英语成绩 总分n);printf(%dt%st%st%st %d %d %d %dn, p-num,p-name,p-sex,p-nation,p-score0,p-score1,p-score2,p-sum);printf(nn请输入你还要查询的学生的学号,输入0退出学号查询:);scanf(%d,&fnum); else if (choose=2) printf(n请输入你要查询的学生的姓名,输入0退出姓名查询:); scanf(%s,tem); for(;strcm
22、p(tem,0);) for(p=head-next;p!=null&strcmp(p-name,tem);p=p-next); if (!p) printf(nn找不到你要查询的姓名,请重新输入,输入0表示结束:); scanf(%s,tem); else if (!strcmp(p-name,tem)printf(n姓名为%s学生的数据为:n,p-name);printf(学号t姓名t性别t民族t语文成绩 数学成绩 英语成绩 总分n);printf(%dt%st%st%st %d %d %d %dn,p-num,p-name,p-sex,p-nation,p-score0,p-score1
23、,p-score2,p-sum);printf(nn请输入你还要查询的学生的姓名,输入0退出姓名查询:);scanf(%s,tem); else printf(n你选择不查询!n);break;student *add_new(student *head) /插入学生数据student *p;int flag; printf(nn请输入要新加入的学生的学号,学号为0表示结束输入:); scanf(%d,&flag);while(getchar()!=n);for(;flag;)p=(student *)malloc(sizeof(student);p-num=flag;printf(请输入新加
24、入学生的姓名:,n);scanf(%s,p-name); printf(请输入新加入学生的性别:,n);scanf(%s,p-sex);printf(请输入新加入学生的民族:,n);scanf(%s,p-nation);printf(请输入新加入学生的数据结构成绩:,n);scanf(%d,&p-score0);printf(请输入新加入学生的概率统计成绩:,n);scanf(%d,&p-score1);printf(请输入新加入学生的线性代数成绩:,n);scanf(%d,&p-score2);p-sum=p-score0+p-score1+p-score2;p-next=head-next
25、;head-next=p;n+;printf(n请输入还要加入的学生的学号,输入0表示结束:); scanf(%d,&flag);printf(加入后的成绩表为:n);return head; void print(student *head) /显示学生成绩表student *p=head-next;if (!p) printf(nn此系统目前没有任何学生数据!nnn);return;printf(此系统目前共计学生%d名:n,n); printf(*学生成绩统计*n);printf(学号t姓名t数据结构成绩 概率统计成绩 线性代数成绩 总分n);for(;p;p=p-next)printf
26、( %dt%st %d %d %d %dn,p-num,p-name,p-score0,p-score1,p-score2,p-sum=p-score0+p-score1+p-score2); printf(*nn);void stats(student *head) /统计各分数段人数student *p=head-next;int cou05=0,0,0,0,0,cou15=0,0,0,0,0,cou25=0,0,0,0,0;if(!p) printf(n当前系统没有任何学生数据。n );return;printf(ntt 数据结构 概率统计 线性代数);while(p)if(p-scor
27、e0score1score2next; printf(n060的学生人数是: %d %d %d,cou00,cou10,cou20);p=head-next;while(p)if(p-score0=60&p-score0score1=60&p-score1score2=60&p-score2next; printf(n6070的学生人数是: %d %d %d,cou01,cou11,cou21);p=head-next;while(p)if(p-score0=70&p-score0score1=70&p-score1score2=70&p-score2next; printf(n7080的学生人数是: %d %d %d,cou02,cou12,cou22); p=head-next;while(p)if(p-score0=80&p-score0score1=80&p-score1score2=80&p-score2next; printf(n8090的学生人数是: %d %d %d,cou03,cou13,cou23); p=head-next;while(p)if(p-score0=90)cou04+;if(p
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 施工现场扬尘治理方案与技术措施
- 国际海运安全法规SOLAS详解
- Lesson 52 A pretty carpet教学设计-2023-2024学年初中英语第二册新概念英语
- 企业环境保护措施与执行办法
- 三年级上册数学平移旋转教学心得
- 高速公路收费站安全管理操作指南
- 跨境电商税收政策解析报告
- 初中体育课程教学内容全解析
- 小学音乐课堂活动设计与教案
- 软件项目开发合同范本模板
- (完整版)贵州三年级地方课程教案
- 临床基本检查方法和检查程序课件
- 新疆五彩湾温泉二期建设项目可行性研究报告
- 红金消结片对“乳腺增生”的疗效观察
- 基于Java的网上蛋糕预订销售系统的设计与实现
- 青海2023届高校毕业生就业报告出炉:医学和法学就业率最高
- 生理学 第九章 感觉器官的功能
- 急救车必备药品和物品 急救车物品药品管理
- 静脉血栓栓塞症预防与护理课件
- 西门子低压电器快速选型手册
- 养羊与羊病防治技术课件
评论
0/150
提交评论