学生成绩管理系统20833_第1页
学生成绩管理系统20833_第2页
学生成绩管理系统20833_第3页
学生成绩管理系统20833_第4页
学生成绩管理系统20833_第5页
已阅读5页,还剩29页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、成绩评定教师签名嘉应学院 计算机学院数据结构实验报告课程名称:数据结构开课学期:2016-2017学年第1学期班级:1401指导老师:钟治初实验题目:学生成绩管理系统学号:141110043姓名:永达提交时间:2016年10月27日、 实验要求:1) 设计一个学生成绩管理系统,模拟高考成绩的管理。功能至少包括数据输入,输出,查找, 插入,删除,修改,排序,统计各成绩段的人数,考生成绩的排位,报考志愿的检索等。2) 所有输入输出数据均使用文本文件进行读写。3) 所有过渡性数据使用二进制文件进行读写和保存。4) 设计使用平行志愿进行出档。5) 设计使用非平行志愿行进出档。6) 设计志愿时,可以设计

2、 12个志愿,如果平行志愿,则前后各 6 个分别为第一组和第二组平 行志愿处理。7) 设计考生记录的字段时,可以预留补录志愿的字段。或者将未录取考生的数据进行备份, 然后将志愿清空后再增加补录志愿。(1) 按学号顺序输入学生信息,包括学号、性别、课程单科成绩(单科成绩 包括C语言、高数、大学语文、汇编、中近史),并存入文件中。(2) 从文件读取数据(3) 删除学生信息(4) 查询学生信息(查询可分为精确查询和模糊查询)(5) 修改学生信息(要求修改后,数据依然是按学号顺序排列)(6) 插入学生信息(要求插入后,数据依然是按学号顺序排列)(7) 附加功能,学生可自由发挥,如:排名、求各门课程平均

3、分等。二、实验目的1、掌握和巩固C语言编写的相关知识和技巧,特别是函数、指针、结构体。2、能够采用模块化思想调试程序。3、通过该课程设计的操作与实践,能够根据数据对象的特性,学会数据组织的方法,把现实世界中的实际问题在计算机部表示出来,并培养基本的、良好的程序设计技能,全面提高学生的程序设计、开发能力。四、系统分析4.1相关基础知识选择、循环、函数、指针、结构体、链表4.2总体方案架构图:新建文件 打开文住排名功能*搀姓名删曆入 1 FnF專若查我裁子号PSUK按性别誉找描扎WT的宀丰侑崽方案描述:菜单:运用 switch case 选择功能,在每个 case 中有相对应的调用语句,调用 相对

4、应的函数。删除功能:调用删除函数,判断是否保存,如果保存写入文件。 插入功能:运用链表插入。修改功能:调用删除函数跟插入函数,先删除再插入,从而实现修改功能。 查询功能:调用菜单中的查询函数,用循环实现查询功能。 排名功能:调用菜单中的排名函数,通过冒泡排序法实现功能。 保存功能:运用写入文件。五、系统设计定义一个 student 类型的结构体,里面包含学生信息,包括学号、 、性别、课 程单科成绩(单科成绩包括 C 语言、高数、大学语文、汇编、中近史) 、总分、 平均成绩。5.1 新建功能从键盘输入 N 个学生基本信息,包括学号、 、性别、课程单科成绩(单科成 绩包括 C 语言、高数、大学语文

5、、汇编、中近史) ,编程根据输入信息计算各学 生总分和平均分。创建动态链表,将学生信息存入链表中。在DOS屏幕上打印链表所有学生信 息。新建一个文件,将动态链表中的数据(即输入的学生信息)存入文件中。5.2 打开功能打开一个文件, 从文件中读取学生信息, 并新建链表,将数据存入动态链表。在DOS屏幕上打印链表所有学生信息。5.3 修改功能在DOS屏幕上打印出当前的所有学生信息。输入待修改的学生学号,若不存在,输出“查无此人” ;若存在,则输入修改的信息,并存回学生信息链表中, 存回后学生信息链表依然是按学号顺序排列。 最后在DOS屏幕上打印出新的所有学生信息。5.4 插入功能在DOS屏幕上打印

6、出当前的所有学生信息。输入插入信息的条数,从第一条开始到最后一条,依次输入每条学生信息, 包括学号、性别、课程单科成绩(单科成绩包括 C 语言、高数、大学语文、汇 编、中近史),根据输入信息计算各学生总分和平均分。若输入的学生学号已经存在,则输出“该学号已存在,无法操作! ”,否则将 学生信息插入到链表中,插入后链表中的数据依然按照学号排列。最后在DOS屏幕上打印出新的所有学生信息。5.5 查询功能查询分为:精确查询、模糊查询 精确查询:(1)按查询 输入待查询的 ; 根据顺序查询的方法, 对学生的依次查询, 直到查询到与输入的信息相匹配的信息,并在DOS屏幕上显示出来。若需要查询的信息不存在

7、,系统则会提示找 不到此人。可重复查询。(2)按学号查询输入待查询的学号 ; 根据顺序查询的方法,对学生的学号依次查询,直到查询到与输入的信息相匹配的信息,并在DOS屏幕显示出来。若需要查询的信息不存在,系统则会提示 找不到此人。可重复查询。模糊查询:(1)按姓氏查询 输入待查询的姓氏 ; 根据顺序查询的方法,对学生的姓依次查询,当查询到与输入的信息相匹配的信息,则在DOS屏幕显示出来,直到链表结束。若需要查询的信息不存在,系 统则会提示找不到相关信息。可重复查询。(2)按性别查询输入待查询的性别 ;根据顺序查询的方法,对学生的性别依次查询,当查询到与输入的信息相匹配的信息,则在DOS屏幕显示

8、出来,直到链表结束。可重复查询。5.6 删除功能在DOS屏幕上打印出当前的所有学生信息。(1)按删除输入需要删除的学生;根据顺序查询的方法,对学生的依次查询,当查询到与输入的信息相匹配的 信息,则删除该生信息,并在DOS屏幕显示出新的所有学生信息。 若需要删除的 信息不存在,系统则会提示删除失败。(2)按学号删除输入需要删除的学生学号;根据顺序查询的方法,对学生的学号依次查询,当查询到与输入的信息相匹 配的信息,则删除该生信息,并在DOS屏幕显示出新的所有学生信息。若需要删 除的信息不存在,系统则会提示删除失败。5.7排名功能可根据学生的总分进行排名,并在 DOS屏幕上输出排名结果。5.8关于

9、我们在DOS屏幕上输出系统相关信息。5.9软件说明 5.10退出保存选择0退出系统,保存功能在每段函数结束后实现。5.10运行结果5.10.0主界面 欢迎便用学主成绩管廛栗统 * fi4 *011 .新理文件X曲舲3-嗥改功能弓-査洵功館祁徒排屯功琵杯弓软件说明XKK2 扌T幵文件乂-価.入功能删除功能卄廿貝关于我 IL口-退出麻统MMAKMXM5.10.1新建文件(输入一组数据,存入文件中)诗社入皓凯1请救入文件码拄和新建文件釈如心123)如川航需匿需入几亲信卅:3请按学号闖序僱次输入学生信总 陆丿、姓名妇:2hBngsBn 肚_ 鬲入孚号如:1 陡人性: M 匪|人丄百育倍,張;5S 槪人

10、高熬虑编;66 窃入大季馭處绩;77 复人汇舜i暮言虛犢:8 轶人中近史衣绩:4H宦入蚌苦 5: zhan$*an;于四弼入爭号4妇:1: 2 潮入性J; F 帝入c洛肓成运:44 罐:入苗歎或唏-55 窘人大孚诰丈战绩:6S 轻入也养倍占或绩;7?半H FF总分平肉分333.9 66”丽33B.0E6.0Q374.9 7.80中近史38&5577C诒三55:号笔入拐令:2軽1啤号宦丁 1 z J5.10.2打开文件(打开文件,读取文件数据存入链表):交尿夫件歎擔肃6入读發的文件ftftfa文件名(iD:d:/123) :!:/!57打开文件成功请技任-信电如下:汇编音言靄TT99戌学语文?r

11、B6885.10.3修改功能5.10.4 插入功能5.10.5 查询功能精确查询 -按查询精确查询 -按学号查询模糊查询 -按姓氏查询模糊查询-按性别查询5.10.6删除功能清箍入指令泻 疝按学导剖除 背2按足名別除 半:按删除按学号删除5.10.7总分排名功能总分祥堀和下:学号姓名性别语言高数大学语文汇编语言中近史总分平均分qF55778833319.Q63. S05赵七M458755332弱卫57.203334455GG7?275.055.0Q2李四F2223445S能220.044厨1乘二H11223344551G5.033. QG清按任芦键缠鏤5.10.9软件说明说明运彳亍本软件需先悒

12、用新建文件或扌J歼文件功能,否则込切出错: 毎机侵用惨改 插入 删降等功能后需莹新打开丈件读取妓据, 否则得到的數踞是未性特旳,纯属取创禁止引热 请按任憲嗨竝渎 5.10.10退出保存保存功能在每段函数结束后实现。六、心得体会通过这次实验我们更好的掌握和巩固 C 语言编写的相关知识和技巧,特别是 函数、指针、结构体、链表等功能。通过该课程设计的操作与实践,能够根据数 据对象的特性, 学会数据组织的方法, 把现实世界中的实际问题在计算机部表示 出来,并培养基本的、 良好的程序设计技能, 虽然在设计过程中遇到了不少问题 麻烦,在教材数据的帮助下,完成了这次程序设计。七、源代码#include #i

13、nclude #include #define LEN sizeof(struct student)/ 结构体长度#define NEW (struct student *)malloc(LEN)FILE *fp; /* 文件指针 */ struct studentint num;char name20;int score1,score2,score3,score4,score5; char sex;double aver;float sum;struct student *next;char filename100;struct student *creat( ) struct studen

14、t *h;struct student *p,*q;printf( 需要输入几条信息: );int i,n; scanf(%d,&n);n);printf(n 请按学号顺序依次输入学生信息char c=getchar();h=NULL;for(i=1;i=n;i+) p=NEW;if (p=NULL) printf(Allocation failuren);exit(0);printf(n);printf( 输入 : );gets(p-name);printf(输入学号 : );scanf(%d,&p-num);c=getchar();printf( 输入性别 : );scanf(%c,&p-

15、sex);printf( 输入 c 语言成绩 : );scanf(%d,&p-score1);printf( 输入高数成绩 : );scanf(%d,&p-score2);printf( 输入大学语文成绩 : );scanf(%d,&p-score3);printf( 输入汇编语言成绩 : );scanf(%d,&p-score4);printf( 输入中近史成绩 : );scanf(%d,&p-score5);c=getchar(); p-sum=p-score1+p-score2+p-score3+p-score4+p-score5; p-aver=(p-score1+p-score2+p

16、-score3+p-score4+p-score5)/5.0;p-next=NULL;if (h=NULL) /* h 为空,表示新结点为第一个结点 */ h=p; /* 头指针指向第一个结点 */ else /* h 不为空 */ q-next=p; /* 新结点与尾结点相连接 */ q=p; /* 使 q 指向新的尾结点 */return h;/* 总分排名 */struct student *paixu (struct student *head) system(cls);printf( 总分排名如下 :n); struct student *op; struct student *p;

17、 struct student *p1,*p2;p1 = (struct student *) malloc (LEN); p1-next = head;head = p1;for (op = NULL; op != head; op = p)for (p = p1 = head; p1-next-next!=op; p1 = p1-next)if (p1-next-sum next-next-sum) p2 = p1-next-next; p1-next-next = p2-next; p2-next = p1-next; p1-next = p2; p = p1-next-next;p1

18、= head;head = head-next;free (p1); p1 = NULL;return head;void prlist(struct student *head)/* 输出函数 */ struct student *p; p=head;中近史printf(n 学号 性别 c 语言 高数 大学语文 汇编语言 总分平均分 n);while (p!=NULL) printf(%d %s %c %d %d %d %d %d%.1f %.2fn,p-num,p-name,p-sex,p-score1,p-score2,p-sc ore3,p-score4,p-score5,p-sum,

19、p-aver);p=p-next;system(pause);/*write将 数 据 存 入 文 件*/ void write(struct student *head)struct student *p;p=head;if(head!=NULL)while(p!=NULL) fwrite(p,LEN,1,fp); p=p-next;printf( 文件更新成功 !n);fclose(fp);system(pause);system(cls);/*read 将文件数据读入一个新链表中*/ struct student *read(void)struct student *head;struc

20、t student *p1,*p2;head=NULL;p1=NEW;rewind(fp); / 指向文件头fread(p1,LEN,1,fp);while(!feof(fp)if(head=NULL)head=p1;elsep2-next=p1;p2=p1;p1=NEW;fread(p1,LEN,1,fp);p2-next=NULL;fclose(fp);return(head);void find(struct student *head) /* 查询功能 */ int t,s,i,j;struct student *p,*q;char x10,y2=0,c2;char k,f;p=hea

21、d;printf( 精确查找 :n *1 按查找 n *2 按学号查找 n 模糊查找 n *3 按姓 氏查找:n *4 按性别查找n);scanf(%d,&s);k=getchar();if(s=1)printf( 请输入: );gets(x);while (p!=NULL)if (strcmp(x,p-name)=0) printf(n 学号性别 c 语言 高数 大学语文 汇编语言 中近史 总分 平均分 n);printf(%d %s %c %d %d %d %d %d%.1f %.2fn,p-num,p-name,p-sex,p-score1,p-score2,p- score3,p-sc

22、ore4,p-score5,p-sum,p-aver);j=1;else i=1;q=p;p=p-next;else if(s=2)printf( 按学号查找 :n);scanf(%d,&t);while (p!=NULL)if (t=p-num) printf(n 学号 性别 c 语言 高数 大学语文 言 中近史 总分 平均分 n);printf(%d %s %c %d %d %d %d %d%.1f %.2fn,p-num,p-name,p-sex,p-score1,p-score2,p- score3,p-score4,p-score5,p-sum,p-aver);j=1;else i=

23、1;q=p;p=p-next;else if(s=3) printf( 按姓氏查询 :n);gets(c);while ( p!=NULL)if (strncmp(c,p-name,1)=0) printf(n 学号 性别 c 语言 高数 大学语文 言 中近史 总分 平均分 n);printf(%d %s %c %d %d %d %d %d%.1f %.2fn,p-num,p-name,p-sex,p-score1,p-score2,p- score3,p-score4,p-score5,p-sum,p-aver);汇编语汇编语j=1;else i=1; q=p;p=p-next;else i

24、f(s=4) printf(按性别查询 :n);f=getchar();while(p!=NULL) if(f=p-sex) printf(n 学号 性别 c 语言 高数 大学语文 汇编语言 中近史 总分 平均分 n);printf(%d %s %c %d %d %d %d %d%.1f %.2fn,p-num,p-name,p-sex,p-score1,p-score2,p-scor e3,p-score4,p-score5,p-sum,p-aver);j=1;else i=1; q=p;p=p-next; if(i=1&j!=1) printf(Not found. 输入错误 n);sys

25、tem(pause); system(cls);struct student *delstudent(struct student *head)/* 删除功能 */ int s,n,m=1;char c;struct student *p,*q;char x10;while(m)printf( *1按学号删除 n *2 按删除 n);scanf(%d,&s); c=getchar();printf( 已有信息如下: n); prlist(head);if (head=NULL) printf(This is a empty list.);return head;p=head;switch(s)

26、 case 2: printf(请输入: );gets(x);while (strcmp(x,p-name)!=0 & p-next!=NULL) q=p;p=p-next;if (strcmp(x,p-name)=0) if (p=head) head=p-next;elseq-next=p-next;free(p);elseprintf(Not found.n);continue; ;m=0;break;case 1: printf( 请输入学号: ); scanf(%d,&n); c=getchar();while (n!=p-num & p-next!=NULL) q=p;p=p-ne

27、xt;if (n=p-num) if (p=head) head=p-next;elseq-next=p-next;free(p);elseprintf(Not found.n);continue; ;m=0;break;default: printf(输入错误 n);break;return head;void about()/*关于我们 */ system(cls);printf(printf( ( printf( /A _s , A _ A nn); . ) ( )nn);鯛 / Hinn);printf(成员介绍 nn);printf(1.组长: nn);printf(2.组员: nn

28、);printf(3.组员: nn);printf(4.组员: nn);printf(产品信息 nn);printf(一. 产品用途:主要用于学生成绩管理与查询.nn);printf(二. 班级成绩管理系统主要包括: 数据的录入nn);printf(读取 显示 删除 插入 查找 修改 排名.nn);system(pause);system(cls);void end()/* 退出系统 */char s;printf( 是否退出系统 Y/N?n);scanf(%c,&s);if(s=Y | s=y) exit(0);else if(s=N | s=n) return;elseprintf( 输入

29、错误, 请重新输入 nn);system(pause);return;struct student *insert(struct student *head, struct student *op) /* 插 入功能 */ struct student *p,*q;if (head=NULL) head=op; /* 空表时,插入结点 */ op-next=NULL;else p=head;while (op-num p-num & p-next!=NULL) q=p;p=q-next; if (op-num=p-num) printf(n 该学号已存在,无法插入 !n); return he

30、ad;else if(op-numnum) if (p=head) head=op; /* 在表头插入结点 */ elseq-next=op; /* 在表中间插入结点 */ op-next=p;else p-next=op; /* 在表尾插入结点 */ op-next=NULL;return head;struct student *xiugai(struct student *head)/* 修改功能 */struct student *op=NEW;int c; head=delstudent(head);printf( 请输入新名字: ); gets(op-name);printf( 请

31、输入新学号: );scanf(%d,&op-num);c=getchar();printf( 请输入新性别: ); scanf(%c,&op-sex);printf( 请输入新 C 语言成绩: ); scanf(%d,&op-score1);printf( 请输入新高数成绩: );scanf(%d,&op-score2);printf( 请输入新大学语文成绩: ); scanf(%d,&op-score3);printf( 请输入新汇编成绩: );scanf(%d,&op-score4);printf( 请输入新中近史成绩 :);scanf(%d,&op-score5);c=getchar()

32、;op-sum=op-score1+op-score2+op-score3+op-score4+op-score5;op-aver=(op-score1+op-score2+op-score3+op-score4+op-score5)/5.0Jop-next=NULL; head=insert(head,op);return head;struct student *ca(struct student *head)/* 插入功能 */struct student *op=NEW;char c;printf( 请输入名字: );gets(op-name);printf( 请输入学号: );sca

33、nf(%d,&op-num);c=getchar();printf( 请输入性别: );scanf(%c,&op-sex);printf(请输入 C 语言成绩: );scanf(%d,&op-score1);printf( 请输入高数成绩: );scanf(%d,&op-score2);printf( 请输入大学语文成绩: ); scanf(%d,&op-score3);printf( 请输入汇编成绩: );scanf(%d,&op-score4);printf( 请输入中近史成绩 :);scanf(%d,&op-score5);c=getchar(); op-next=NULL; head=

34、insert(head,op); op-sum=op-score1+op-score2+op-score3+op-score4+op-score5;op-aver=(op-score1+op-score2+op-score3+op-score4+op-score5)/5.0Jreturn head;void help() /* 软件说明 */ system(cls);printf(n 说 明nnn);printf( 运行出错。 n);printf( 读取数据, n);printf(动返回到 n);printf(运行本软件需先使用新建文件或打开文件功能,否则每次使用修改 插入 删除等功能后需重新

35、打开文件否则得到的数据是未保存的。每运行完一个功能会自主界面nnn);printf(nnsystem(pause);system(cls);纯属原创 禁止抄袭 nn);数 菜 单char c,r; struct student *head; int z;while(1)nprintf(n);prin tf(prin tf( nn);统 nn);prin tf( nn);printf(*/* 主 函*/int main() system(color 9f);*松欢迎使用学生成绩管理系菜单printf(=nn);printf(*1.新建文件文件 *);printf(nn);printf(*3.修改功能功能 *);printf(nn);printf(*5.查询功能功能 *);printf(nn);printf(*7.排名功能我们 *);*2.4.6.8.打开插入删除关于printf(nn);printf(9.

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论