收藏 分销(赏)

C语言专业课程设计成绩标准管理系统.doc

上传人:天**** 文档编号:2727372 上传时间:2024-06-05 格式:DOC 页数:55 大小:131.54KB
下载 相关 举报
C语言专业课程设计成绩标准管理系统.doc_第1页
第1页 / 共55页
C语言专业课程设计成绩标准管理系统.doc_第2页
第2页 / 共55页
C语言专业课程设计成绩标准管理系统.doc_第3页
第3页 / 共55页
C语言专业课程设计成绩标准管理系统.doc_第4页
第4页 / 共55页
C语言专业课程设计成绩标准管理系统.doc_第5页
第5页 / 共55页
点击查看更多>>
资源描述

1、一、 课程设计内容(1) 信息维护:要求:学生信息数据要以文件形式保留,能实现学生信息数据维护。此模块包含子模块有:增加学生信息、删除学生信息、修改学生信息(2) 信息查询:要求:查询时可实现按姓名查询、按学号查询(3) 成绩统计:要求:A输入任意一个课程名(如数学)和一个分数段(如60-70),统计出在此分数段学生情况。(4) 排序:能对用户指定任意课程名,按成绩升序或降序排列学生数据并显示排序结果(使用表格形式显示排序后输出结果)(使用多个方法排序者,加分) (二)其它要求:(1) 只能使用C/C+语言,源程序要有合适注释,使程序轻易阅读(2) 最少采取文本菜单界面(假如能采取图形菜单界面

2、愈加好)(3) 学生可自动增加新功效模块(视情况可另外加分)(4)写出课程设计汇报,具体要求见相关说明文档二、课程设计要求和数据1、深入掌握和利用C语言进行程设计能力;2、深入了解和利用结构化程序设计思想和方法;3、初步掌握开发一个小型实用系统基础方法;4、学会调试一个较长程序基础方法;5、学会利用步骤图或N-S图表示算法;6、掌握书写程序设计开发文档能力。三、课程设计应完成工作1、编写完成对应题目标程序;2、编写课程设计汇报,课程设计汇报内容应包含以下6个部分:1) 需求分析:包含设计题目、设计要求和系统功效需求分析;2) 总体设计:包含系统总体设计框架和系统功效模块图;3) 具体设计:包含

3、关键功效模块算法设计思绪和对应工作步骤图;4) 调试分析过程描述:包含测试数据、测试输出结果,和对程序调试过程中存在问题思索(列出关键问题犯错现象、犯错原因、处理方法及效果等,合适包含结果截图);5) 总结:课程设计完成了哪些功效,有没有什么扩展功效?还有哪些地方需要改善?课程设计过程中学习体会和收获、对此次课程设计认识和自己提议等内容; 6) 附录:关键源程序代码,含必需注释。3、答辩:在试验室建立程序运行环境,并在指导老师监督下,独立解 决问题、运行程序和回复老师提出问题。目 录1 设计目标和要求P42 总体设计P43 具体设计P53.1功效模块设计P53.1.1 XX功效模块(可选) P

4、53.1.2 YY功效模块(可选) P63.1.3 ZZ功效模块(可选)P73.2数据结构设计P84调试分析 P9 4.1结构体P9 4.2链表P115碰到问题及处理方法分析P126 总结P137源文件P13 7.1链表P13 7.2结构体P281、目标和要求一 目标:编制一程序实现对学生成绩管理,让自己既动手又动脑,独立实践,将书本上理论知识和实际应用问题进行有机结合,锻炼自己分析、处理实际问题能力,提升本身项目开发及程序调试能力。二 要求: 1、整个系统均用C语言实现;2、利用指针、结构体、链表来实现学生成绩数据结构设计;3、系统含有输入、显示、查询(查询时可实现按姓名查询、按学号查询)、

5、删除、排序、插入,保留、读取基础功效;4、系统各个功效模块全部用函数形式来实现;5、学生信息数据要以文件形式保留,能实现学生信息数据维护。此模块包含子模块有:增加学生信息、删除学生信息、修改学生信息;6、能够输入任意一个课程名(如数学)和一个分数段(如60-70),统计出在此分数段学生情况;7、能对用户指定任意课程名,按成绩升序或降序排列学生数据并显示排序结果;8、可自动增加新功效模块;9、能够将学生信息从文件中读取出来。 2 总体设计1、 主函数 main()利用if-else,While循环语句和switch()实现各函数调用,系统依据输入数字选项来调用对应函数。2、 菜单选择函数void

6、 menu();这是一个无参函数,关键实现“功效选择”界面,在这个界面里有显示系统13大功效,依据每个功效前面序号进行选择。等实施完每一个函数功效后,按任0键回到主界面也要经过这个函数提醒来实现!3、 自定义函数 void printstart()、void Wrong()、void Nofind()、void printc()、void printe(Node *p)用void Wrong()来提醒输入错误,用void Nofind()提醒没有找到学生资料,用void printc()来输出汉字,用void printe(Node *p)来输出汉字。main() void Add(Link

7、l) void Maths(Link l) void Qur(Link l) void English(Link l) void Del(Link l) void select(Link l) void Modify(Link l) void Save(Link l) void Disp(Link l) void menu() void Tongji(Link l) void printc() void Chinese(Link l) void printe(Node *p)3 具体设计3.1功效模块设计3.1.1 排序数学成绩功效模块函数void Maths(Link l)该函数用于对数学成

8、绩进行降序,ll=(Link)malloc(sizeof(Node)用于做新链表连接,假如原链表为空话,返回;不为空话,p=l-next;建立接点用于保留信息,对指定链表地址进行排序。步骤图图所表示:Link llll=(Link)malloc(sizeof(Node) 用于做新连表 l-next=NULL是 否没有资料能够 p=l-next排序 while(p)return s=(Node*)malloc(sizeof(Node) rr=ll while(rr-next!=NULL& rr-next-data.mgrade=p-data.mgrade) 是 rr-next=NULL 否 rr

9、-next=s s-next=rr-next; rr-next=s p=p-next l-next=ll-next (排序完成)3.1.2 显示学生资料功效模块函数void Disp(Link l)该函数负责显示学生资料,这是一个不返回值函数。算法:先将p结点指针指向第一个结点,将p结点(即第一个结点)数据输出。然后再将p结点指针指向p指针指针(即下一结点),将p结点(即第一结点)数据输出。反复实施此步聚直到p指针指向NULL为止。步骤图图所表示: 原来链表是否为空是 否提醒没有 p指向下一结点p=p-next资料能够 输出p指向结点,即学生信息显示 return p指向下一结点p=p-nex

10、t3.1.3 删除资料功效模块函数void Del(Link l)该函数用于有选择地删除学生资料,假如原来链表为空话,会返回;不为空话,选择用按哪种类型删除,假如按学号删除,就输入学号,后判定是否取得地址,取得就实施删除;按名字删除就输入名字,运行同学号一样。步骤图图所表示: 原链表是否为空是 否没有资料 1 按1学号还是2按名字? 2能够删除 输入你要删除学号 输入你要删除名字 P是否取得输入地址 P是否取得输入地址 是 否 否 是Return r指向下一 Nofind() Nofind () r指向下一 结点 结点 实施free(p) 实施free(p)3.2数据结构设计(可选)一个结构体

11、变量中能够存放一组数据(如一个学生学号、姓名、成绩等数据)。一个结构体变量指针就是该变量所占据内存段起始地址。能够设一个指针变量,用来指向一结构体变量,此时指针变量值是结构体起始地址。指针量变也能够用来指向一结构体数组中元素。struct student char num10;/* 学号 */ char name20; char sex4; int cgrade; int mgrade; int egrade; int totle; int ave; char neartime10;/* 最近更新时间 */ ; typedef struct node struct student data;

12、struct node *next; Node,*Link;6 总 结经过一个多星期C语言课程设计,感觉自己收获不少!首先是:要达成这么功效,使用链表相当方便,但不轻易了解,所以在这方面我很了很多时间看书本,使C语言知识强化了不少。其次,在做课程设计过程中,发觉了平时很多没有注意到问题,比如:返回值函数和不返回值函数二者在主函数中调用是不一样更关键是,这次课程设计即使花了我不少时间,但正是这些时间,让我见识到了C语言关键性。这个学生成绩管理系统全部是在自己知识范围内完成,所以界面清楚简单,可能不是很好看,但绝对实用!从这里我也得到一个体会,做一个程序,或开发一个软件,应该着重从它后台制作入手,

13、不能做出一个中看不中用程序或软件。相信这次课程设计使我C语言知识扎实了很多。因为这是第一次进行设计,写文档,难免会写得不好!7 源程序7. 1链表#include stdio.h #include stdlib.h #include string.h int shoudsave=0; /* */ struct student char num10;/* 学号 */ char name20; char sex4; int cgrade; int mgrade; int egrade; int totle; int ave; char neartime10;/* 最近更新时间 */ ; typed

14、ef struct node struct student data; struct node *next; Node,*Link; void menu() printf(*); printf(t1登记学生资料ttttt2删除学生资料n); printf(t3查询学生资料ttttt4修改学生资料n); printf(t5显示学生资料ttttt6统计学生资料n); printf(t7排序语文成绩ttttt8排序数学成绩n);printf(t9排序英语成绩ttttt10选出分段分数n);printf(t11保留学生资料ttttt12帮助信息ttn);printf(t0退出系统tttttttn);p

15、rintf(*n); void printstart() printf(-n); void Wrong() printf(n=提醒:输入错误!n); void Nofind() printf(n=提醒:没有找到该学生!n); void printc() /* 本函数用于输出汉字 */ printf(学号t 姓名t 性别 语文成绩 数学成绩 英语成绩 总分 平均分n); void printe(Node *p)/* 本函数用于输出英文 */ printf(%-12s%st%st%dt%dt%dt %dt %dn,p-data.num,p-data.name,p-data.sex,p-data.e

16、grade,p-data.mgrade,p-data.cgrade,p-data.totle,p-data.ave); Node* Locate(Link l,char findmess,char nameornum) /* 该函数用于定位连表中符合要求接点,并返回该指针 */ Node *r; if(strcmp(nameornum,num)=0) /* 按学号查询 */ r=l-next; while(r!=NULL) if(strcmp(r-data.num,findmess)=0) return r; r=r-next; else if(strcmp(nameornum,name)=0

17、) /* 按姓名查询 */ r=l-next; while(r!=NULL) if(strcmp(r-data.name,findmess)=0) return r; r=r-next; return 0; void Add(Link l) /* 增加学生 */ Node *p,*r,*s; char num10; r=l; s=l-next; while(r-next!=NULL) r=r-next; /* 将指针置于最末尾 */ while(1) printf(请你输入学号(以0返回上一级菜单:); scanf(%s,num); if(strcmp(num,0)=0) break; whi

18、le(s) if(strcmp(s-data.num,num)=0) printf(=提醒:学号为%s学生已经存在,若要修改请你选择4 修改!n,num); printstart(); printc(); printe(s); printstart(); printf(n); return; s=s-next; p=(Node *)malloc(sizeof(Node); strcpy(p-data.num,num); printf(请你输入姓名:); scanf(%s,p-data.name); getchar(); printf(请你输入性别:); scanf(%s,p-data.sex)

19、; getchar(); printf(请你输入语文成绩:); scanf(%d,&p-data.cgrade); getchar(); printf(请你输入数学成绩:); scanf(%d,&p-data.mgrade); getchar(); printf(请你输入英语成绩:); scanf(%d,&p-data.egrade); getchar(); p-data.totle=p-data.egrade+p-data.cgrade+p-data.mgrade; p-data.ave=p-data.totle / 3; /* 信息输入已经完成 */ p-next=NULL; r-next

20、=p; r=p; shoudsave=1; void Qur(Link l) /* 查询学生 */ int sel; char findmess20; Node *p; if(!l-next) printf(n=提醒:没有资料能够查询!n); return; printf(n=1按学号查找n=2按姓名查找n); scanf(%d,&sel); if(sel=1)/* 学号 */ printf(请你输入要查找学号:); scanf(%s,findmess); p=Locate(l,findmess,num); if(p) printf(tttt查找结果n); printstart(); prin

21、tc(); printe(p); printstart(); else Nofind(); else if(sel=2) /* 姓名 */ printf(请你输入要查找姓名:); scanf(%s,findmess); p=Locate(l,findmess,name); if(p) printf(tttt查找结果n); printstart(); printc(); printe(p); printstart(); else Nofind(); else Wrong(); void Del(Link l) /* 删除 */ int sel; Node *p,*r; char findmess

22、20; if(!l-next) printf(n=提醒:没有资料能够删除!n); return; printf(n=1按学号删除n=2按姓名删除n); scanf(%d,&sel); if(sel=1) printf(请你输入要删除学号:); scanf(%s,findmess); p=Locate(l,findmess,num); if(p) r=l; while(r-next!=p) r=r-next; r-next=p-next; free(p); printf(n=提醒:该学生已经成功删除!n); shoudsave=1; else Nofind(); else if(sel=2) p

23、rintf(请你输入要删除姓名:); scanf(%s,findmess); p=Locate(l,findmess,name); if(p) r=l; while(r-next!=p) r=r-next; r-next=p-next; free(p); printf(n=提醒:该学生已经成功删除!n); shoudsave=1; else Nofind(); else Wrong(); void Modify(Link l) Node *p; char findmess20; if(!l-next) printf(n=提醒:没有资料能够修改!n); return; printf(请你输入要修

24、改学生学号:); scanf(%s,findmess); p=Locate(l,findmess,num); if(p) printf(请你输入新学号(原来是%s):,p-data.num); scanf(%s,p-data.num); printf(请你输入新姓名(原来是%s):,p-data.name); scanf(%s,p-data.name); getchar(); printf(请你输入新性别(原来是%s):,p-data.sex); scanf(%s,p-data.sex); printf(请你输入新语文成绩(原来是%d分):,p-data.cgrade); scanf(%d,&

25、p-data.cgrade); getchar(); printf(请你输入新数学成绩(原来是%d分):,p-data.mgrade); scanf(%d,&p-data.mgrade); getchar(); printf(请你输入新英语成绩(原来是%d分):,p-data.egrade); scanf(%d,&p-data.egrade); p-data.totle=p-data.egrade+p-data.cgrade+p-data.mgrade; p-data.ave=p-data.totle/3; printf(n=提醒:资料修改成功!n); shoudsave=1; else No

26、find(); void Disp(Link l) int count=0; Node *p; p=l-next; if(!p) printf(n=提醒:没有资料能够显示!n); return; printf(tttt显示结果n); printstart(); printc(); printf(n); while(p) printe(p); p=p-next; printstart(); printf(n); void Tongji(Link l) Node *pm,*pe,*pc,*pt,*pa; /* 用于指向分数最高接点 */Node *r=l-next; if(!r) printf(n

27、=提醒:没有资料能够统计!n); return ; pm=pe=pc=pt=pa=r; while(r!=NULL) if(r-data.cgrade=pc-data.cgrade) pc=r; if(r-data.mgrade=pm-data.mgrade) pm=r; if(r-data.egrade=pe-data.egrade) pe=r; if(r-data.totle=pt-data.totle) pt=r; if(r-data.ave=pa-data.ave) pa=r; r=r-next; printf(-统计结果-n); printf(总分最高者:t%s %d分n,pt-da

28、ta.name,pt-data.totle); printf(平均分最高者:t%s %d分n,pa-data.name,pa-data.ave); printf(英语最高者:t%s %d分n,pe-data.name,pe-data.egrade); printf(数学最高者:t%s %d分n,pm-data.name,pm-data.mgrade); printf(语文最高者:t%s %d分n,pc-data.name,pc-data.cgrade); printstart(); void Chinese(Link l) Link ll; Node *p,*rr,*s; ll=(Link)m

29、alloc(sizeof(Node); /* 用于做新连表 */ll-next=NULL; if(l-next=NULL) printf(n=提醒:没有资料能够排序!n); return ; p=l-next; while(p) s=(Node*)malloc(sizeof(Node); /* 新建接点用于保留信息 */s-data=p-data; s-next=NULL; rr=ll; while(rr-next!=NULL & rr-next-data.egrade=p-data.egrade) rr=rr-next; if(rr-next=NULL) rr-next=s; else s-

30、next=rr-next; rr-next=s; p=p-next; free(l); l-next=ll-next; printf(n=提醒:排序已经完成!n); void Maths(Link l) /*对数学排序*/ Link ll; Node *p,*rr,*s; ll=(Link)malloc(sizeof(Node); /* 用于做新连表 */ll-next=NULL; if(l-next=NULL) printf(n=提醒:没有资料能够排序!n); return ; p=l-next; while(p) s=(Node*)malloc(sizeof(Node); /* 新建接点用

31、于保留信息 */s-data=p-data; s-next=NULL; rr=ll; while(rr-next!=NULL & rr-next-data.mgrade=p-data.mgrade) rr=rr-next; if(rr-next=NULL) rr-next=s; else s-next=rr-next; rr-next=s; p=p-next; free(l); l-next=ll-next; printf(n=提醒:排序已经完成!n); void English(Link l) /*对英语排序*/ Link ll; Node *p,*rr,*s; ll=(Link)mallo

32、c(sizeof(Node); /* 用于做新连表 */ll-next=NULL; if(l-next=NULL) printf(n=提醒:没有资料能够排序!n); return ; p=l-next; while(p) s=(Node*)malloc(sizeof(Node); /* 新建接点用于保留信息 */s-data=p-data; s-next=NULL; rr=ll; while(rr-next!=NULL & rr-next-data.cgrade=p-data.cgrade) rr=rr-next; if(rr-next=NULL) rr-next=s; else s-next

33、=rr-next; rr-next=s; p=p-next; free(l); l-next=ll-next; printf(n=提醒:排序已经完成!n); void select(Link l) int i; int j,k; Node *pc = l; /用于指向分数最高接点 Node *r=l-next; if(!r) printf(n=提醒:没有资料能够筛选!n); return ; printf(输入课程名1.语文2.数学3.英语);scanf(%d,&i);if(i=1) printf(请输入筛选分数上限:); scanf(%d,&j); printf(请输入筛选分数下限:); s

34、canf(%d,&k); printf(-筛选结果-n); printf(学号t 姓名t 性别 语文成绩 数学成绩 英语成绩 总分 平均分n); printstart(); while(r!=NULL) if(kdata.egrade)&(r-data.egrade)next; else if(i=2) printf(请输入筛选分数上限:); scanf(%d,&j); printf(请输入筛选分数下限:); scanf(%d,&k); printf(-筛选结果-n); printf(学号t 姓名t 性别 语文成绩 数学成绩 英语成绩 总分 平均分n); printstart(); while(r!=NULL) if(kdata.mgrade)&(r-data.mgrade)next; else if(i=3) printf(请输入筛选分数上限:); scanf(%d,&j); printf(请输入筛选分数下限:); scanf(%d,&k); printf(-筛选结果-n); printf(学号t 姓名t 性别 语文成绩 数学成绩 英语成绩 总分 平均分n); printstart(); while(r!=NULL) if(kdata.cgrade)&(r-data.cgrade)next; else Wrong(); void Save(Link l) FILE*

展开阅读全文
相似文档                                   自信AI助手自信AI助手
猜你喜欢                                   自信AI导航自信AI导航
搜索标签

当前位置:首页 > 学术论文 > 其他

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        获赠5币

©2010-2024 宁波自信网络信息技术有限公司  版权所有

客服电话:4008-655-100  投诉/维权电话:4009-655-100

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :gzh.png    weibo.png    LOFTER.png 

客服