C语言课程设计报告示例Word下载.docx
《C语言课程设计报告示例Word下载.docx》由会员分享,可在线阅读,更多相关《C语言课程设计报告示例Word下载.docx(17页珍藏版)》请在冰点文库上搜索。
4.1主函数MAIN()4..
4.2初始化函数STUDENT*INIT()4
4.3菜单选择函数INTMENU_SELECT();
4
4.4输入记录函数STUDENT*CREATE()5
4.5显示记录函数VOIDPRINT(STUDENT*HEAD)5
4.6查找记录函数VOIDSEARCH(STUDENT*HEAD)5
4.7删除记录函数STUDENT*DELETE(STUDENT*HEAD)6
4.8排序函数STUDENT*SORT(STUDENT*HEAD)7
4.9插入函数STUDENT*INSERT(STUDENT*HEAD,STUDENT*NEW)7
4.10保存数据到文件函数VOIDSAVE(STUDENT*HEAD)8
4.11从文件读数据函数STUDENT*LOAD()8
5.调试分析9
6.测试结果9
7.总结12
8.源代码12
1.题目
《学生成绩管理系统》的设计与实现
2.功能
(1)每一条记录包括一个学生的学号、姓名、3门成绩、平均成绩。
(2)输入功能:
可以一次完成无数条记录的输入。
(3)显示功能:
完成全部学生记录的显示。
(4)查找功能:
完成按姓名查找学生记录,并显示。
(5)排序功能:
按学生平均成绩进行排序。
(6)插入功能:
按平均成绩高低插入一条学生记录。
(7)保存功能:
将学生记录保存在任何自定义的文件中,如保存在:
c:
\score。
(8)读取功能:
将保存在文件中的学生记录读取出来。
(9)有一个清晰美观界面来调用各个功能
3.要求
(1)整个系统均用C语言实现;
(2)利用指针、链表来实现学生成绩的数据结构设计;
(3)系统具有输入、显示、查询、删除、排序、插入,保存、读取基本功能;
(4)系统的各个功能模块都用函数的形式来实现;
(5)可以将学生成绩信息保存在文件中。
(6)可以将学生信息从文件中读取出来。
4.设计内容整个系统除了主函数外,另外还有10个函数,实现八大功能:
输入功能、显示功能、查找功能、排序功能、插入功能、保存功能、读取功能。
各个函数的详细设计说明分别如下:
4.1主函数main()
利用无限次循环for(;
;
)和swithch()实现各函数的调用,系统根据输入的数字选项来调用相应的函数。
4.2初始化函数STUDENT*init()
这是一个无参函数,里面只有一个语句,它的作用是使链表初始化,使head的值为
NULL。
比如:
没有这个函数的话,在你没有输入任何数据的情况下,去执行显示功能的时候会显示一些乱码!
4.3菜单选择函数intmenu_select();
这是一个无参函数,主要实现“功能选择”的界面,在这个界面里有显示系统的九大功能,根据每个功能前面的序号进行选择,中间还显示系统当前的时间。
等执行完每一个函数功能后,按任一键回到主界面也要通过这个函数来实现!
4.4输入记录函数STUDENT*create()
这是一个无参函数,用来执行第学生成绩记录的输入,当学生为0时停止输入,函数结
束后,带回一个指向链表头的指针head。
算法:
先声明一个首节点head,并将head-〉next设为NULL。
每输入一个数据就声明一
个新节点P,把p->
next设为NULL,并且链接到之前列表的尾端。
for(;
)
N-S流程图如图1所示。
指针p指向新开辟的单元
指针p是否为空一—
是—否
输出
内存
溢出
输入学号p->
num
p->
num是否为0“
停止输入返回菜单
输入姓名p->
name
for(i=0;
i<
3;
i++)
|输入成绩
sum=s;
average=(float)s/3;
order=0;
next=head;
head=p;
head=NULL
图1输入学生信息流程图
4.5显示记录函数voidprint(STUDENT*head)
这是一个不返回值的有参函数,形参为“链表头的指针”,负责对全部学生成绩记录的输出,不足之处就是不能对学生成绩进行分页显示。
先将p结点的指针指向第一个结点,将p结点(即第一个结点)的数据输出。
然后
再将p结点的指针指向p指针的的指针(即下一结点),将p结点(即第一结点)的数据输出。
重复执行此步聚直到p指针指向NULL为止。
N-S流程图如图2所示。
p=head使指向第一个结点
输出p所指向的结点
p指向一下个结点
当p指的不是表尾
图2显示学生信息流程图
4.6查找记录函数voidsearch(STUDENT*head)
这是一个不返回值的有参函数,形参为“链表头的指针”,实现按学号对某个学生进
行查找,并显示所查找到的记录。
采用线性查找法往下一个节点查找。
输入所要查找的学生的学号S,设一个指针
变量p,先指向第一个结点,当strcmp(p->
name’s)&
&
p!
=NULL时,使p后移一个结点,如果p!
=NULL,输出p所指的结点。
N-S流程图如图3所示。
输入要查找的学生的学号s
p=head使p指向第一结点
当记录的学号不是要找的,或指针不为空时
p=p->
next
NULL如果指针不为空
显示没有该
学生
图3按照学号查找学生信息流程图
4.7删除记录函数STUDENT*delete(STUDENT*head)
这是一个有参函数,形参为“链表头的指针”,先输入要删除的学生记录的学号,找到后显示该学生信息,等确认后便可按“Y”进行删除。
从p指向的第一个结点开始,检查该结点中的num值是否等于输入的要求删除的
那个学号。
如果相等就将该结点删除,如不相等,就将p后移一个结点,再如此进行下去,
直到遇到表尾为止。
N-S流程图如图4所示。
p仁head;
输入入要删除的学号s
当(strcmp(p1->
num,s))&
p1!
=NULL
p2=p1p1=p1->
next
head=p1->
nextp2->
next=p1-next的信息“
(删除头结点)
图4按照学号删除学生信息流程图
4.8排序函数STUDENT*sort(STUDENT*head)
这是一个有参函数,形参为“链表头的指针”,按学生成绩的平均分高低进行排序,还可以显示名次。
N-S流程图如图5所示。
temp=head->
next,head->
next=NULL
当temp!
=NULL时
t=temp;
temp=temp->
next;
p仁head;
p2=head;
当t->
average<
p1->
average&
p1!
p2=p1;
p1=p1->
p1=p2
是
>
t->
next=p1;
head=t;
p2->
next=t;
当p1!
i++;
p1->
order=i;
输出“排序成功”
图5按照平均分降序排序流程图
4.9插入函数STUDENT*insert(STUDENT*head,STUDENT*new)
这是一个有参函数,形参有两个,一个是“链表头的指针”,一个是“待插入指针”,按照原来成绩平均分的高低进行插入,插入后会重新进行排序,并返回。
先将学生的成绩按平均分由高分到低分进行排序,再插入一个新生的结点,要求
按平均分的高低顺序插入。
先用指针变量p0指向待插入的结点,p1指向第一个结点。
如
果pO->
average,则待插入的结点不应插在p1所指的结点之前。
此时将p1后
移,并使p2指向刚才p1所指的结点。
重复以上的步骤,直到pO->
average>
=p1->
average
为止。
这时将p0指向的结点插到p1所指结点之前。
但是如果p1所指的已是表尾结点,则
p1就不应后移了。
如果p0->
average比所有结点的average都小,则应将p0所指的结点插到链表末尾。
如果插入的位置既不在第一个结点之前,又不在表尾结点之后,则将p0的值
赋给p2->
,使p2->
next指向待插入的结点,然后将p1的值赋给p0->
next,使得p0->
next指向p1指向的变量。
如果插入位置为第一个结点之前,则将p0赋给head,将p1赋给p0-
next。
如果要插到表尾之后,应将p0赋给p1->
next,NULL赋给p0->
最后再调用排
序的函数,将学生成绩重新排序.
N-S流程图如图6所示
P仁head,p0=new
原来的链表是空表一
一—匸
将p0所指的结点作为唯一结点
当p0->
average以及p1所指向的不是表尾结
占
八、、
p2指向p1位置p1向后移一个结点
______p0->
p1指向头结点—
是否
p1->
next=p0p0->
next=NULL(插到表尾之后)
head=p0p0->
next=p1(插到表头之前)
p2->
next=p1
(插到表中间)
n=n+1;
(结点加1)
head=sort(hear);
(将成绩重新排序)
图6按照平均分有序插入新学生流程图
4.10保存数据到文件函数voidsave(STUDENT*head)
这是一个不返回值的有参函数,形参为“链表头的指针”,可以把学生记录保存在电脑上由自己任意命名的二进制文件。
N-S流程图如图7所示。
输入要保存记录的文件地址outfile
'
—文件不能打开一
p=head;
输出一个出错信息,并返回菜单
当p不为空时
fwrite(p,LEN,1,fp);
(写入一条记录)
next;
(指针后移)
fclose(fp);
(关闭文件)
图7将学生信息保存到文件流程图
4.11从文件读数据函数STUDENT*load()
这是一个不返回值的有参函数,形参为“链表头的指针”,根据输入的文件地址进行读取。
N-S流程图如图8所示。
定义两个指针变量p1,p2
输入要打开的记录文件地址infile
_〜文件不能打开
否〜
开辟一个新单元
f指针P1是否为空
否是
返回菜单
返回菜单读入记录
图8从文件读入学生信息流程图
5调试分析
(1)刚开始没有那个初始化函数,程序运行后,没有输入任何数据就试得去执行显示功能,结果显示的是一些乱码!
加入初始化函数后,这种现象也随之消失。
(2)刚开始执行输入函数,按学号顺序输入十个学生的成绩,输完后执行显示功能,学生成绩记录是按学号的反顺序显示的,试着在其中增加一些语句,希望能把学号按正常
顺序显示,但暂时没有成功,所以在输入成绩时只能按学号反顺序输入,最后就按学号正常顺序输出了。
(3)刚开始时,先把成绩按平均分排序,再插入一个学生的成绩,执行显示功能,虽
然插入的学生的成绩能正常插入,但该学生的名次为0。
后来,在插入成绩之后,调用排
序函数,把所有成绩重新排序一次。
(4)在输入函数中设了一个无限循环,可以输入无数个学生的成绩信息,当学号为0的时候则停止输入。
(5)输入太多个学生的成绩时,屏幕显示不能控制为一页一页显示,所以为了方便起见,不要输入太多记录,十七左右为最佳。
(6)在没有输入任何信息的情况下,去执行排序功能,最后显示有一个记录,学号、姓名为空白,成绩都为0,名次为1。
(7)在输入选项时不能输入字母,否则会死循环,建议不要乱输字母。
***************这里写自己的调试过程,可以贴图并配以文字分析
*****************
6•测试结果
(1)主函数非法输入测试
如图9所示为主函数非法输入测试。
选釋你晏谡行的骡作(17):
ghfhfgkylhy
辘人u含有养法宇荷「运重訴请一口
请逢择畑费三二的饌作(「町:
1现在谓毡昵提示进特书購电人库
活錯人鱼吃A举的兰旨匡吠*•上)
图9主函数非法输入测试
(2)登记入库测试如图10所示登记入库界面。
ttfe輸fe.s-KF亠I-压J=rF3窄豈生7底
畳<
負豎登登
入库的人库的
A轲书.入库的:
盒库的;
71书籍的书?
(GR):
tp33*fH书詹篩书岛:
因书馆管理系统
還的击版社卅囂机学院
{焉他出整壬期(站TB血刀:
「焉仕輩呈H5
21Q0
书肯书
1.7
思版日期JB存量S?
Tft
tp3$呐国右背肯斑莅我互黃鬲-SAlvS
2193
图11列出了图书馆中的所有藏书,表示,登记入库成功,高等数学数的现存量。
t»
叫匸痔啓日琦童¥
蔽书'
~Od
kxM-»
泡N舜知NX%Xi--=YWrri“kX屈*4kXKkMM«
-4>
<
XWu-=:
WXMMX-NtXr«
t号宰越件香
00它C由E00G000QGQ0
1112?
2舅雜
-23M5G再初坡卷匡傕哼
理碍列讣也界讣氓眉辛弭衲
tpTIII爺带錯也符幵耀
tp;
?
4M置卡皆-;
丄-逼彩打;
j-,-;
.;
:
tp^6S6黑決汴伫主陀
tp^MS致慚期试t-ziflj
|十护5弱^:
1<
lL.lv+.:
出•上孝耳:
再輻盛
图11图书馆所有藏书一览
(3)读者登录数据测试如图12,为读者登陆测试界面。
书号
佻「
作者
出版社
tpMU
*亓
斎—
201'
02計
tqS55S
乂
201102£
9
□C;
i辛煙“:
*tyfla
图12读者登陆数据测试
(4)借书操作测试
如图13所示。
如借书成功,现存量减少。
oql#^r:
k&
■r4--oo
怡愉入疑奏垂哉的书号711I2M
[■--”S.•—id-.
作看
出版日槻
n11222
20G9OG12
zzd
图13借书操作测试
图14为读者的借阅情况。
巧号
■滄
*口
还书日期
tp5泣
篦法异论
環华大学
2011.02.23
tqSSSS
现忧礼仪
无名
T牧学隔
2011.02.29
111222
高等数学
JS果
高敷出版社
2811.02.38
图14读者的借阅情况
(5)还书操作测试
如图15所示。
选中需要还的高等数学书,还书成功,高等数学现存量重新变成25。
捋盘找師节号:
]/予|TJ-t±
拍版社
由皈日期现存st库存氧
111222托芸蠢爭
咼甑出版牡
20090G.M2525
图15还书操作
图16显示读者的借书情况中少了高等数学。
来妥的邃老:
李远髙以站聂窓的儘闻情駅;
书Jg
岀版社
还岂E賄
tpSSSS
劉去导论
FH3W"
W
老英
清半太学
2011,0229
tq5555
现代礼仪
2011,02.29
图16还书成功后的借阅情况
7总结
***************这里写自己的心得体会,比如拿到题目之后如何一步一步实现的?
收
获的经验是什么?
程序中哪部分是碰到的难点?
如何解决这个难题的?
以后怎样做才能提
高程序设计课程的学习效果?
*****************
8源代码
《高级语言程序设计课程设计》评分标准
学号姓名
等级
对知识的理解和掌握
(占总成绩25%)
知识理解透彻,且掌握扎实基本理解所学知识概念不清,没有理解所学知识
程序功能的完善程度
(占总成绩15%)
完善
基本完善不完善
程序结构的合理性
合理
基本合理不太合理
数据结构的合理性
正确应用并有创新正确应用
基本正确应用
学生的工作态度与独立工作能力
工作态度认真能独立完成任务工作态度认真但独立性较差工作态度基本认真但缺乏独立性
设计报告的规范性
符合规范基本符合规范规范性较差
成绩等级
指导老师签字
时间