C语言课程设计报告示例.docx
《C语言课程设计报告示例.docx》由会员分享,可在线阅读,更多相关《C语言课程设计报告示例.docx(17页珍藏版)》请在冰豆网上搜索。
C语言课程设计报告示例
课程设计和调试过程规范化要求
1)需求分析
分析系统功能需求以及用户操作流程。
2)概要设计
在需求分析的基础上,确定系统总体框架(系统功能结构图)。
3)详细设计
定义数据存储结构,并设计实现系统功能的具体算法,画出各算法的工作流程图。
4)代码设计
根据所设计的算法,定义相应函数分别实现系统的各子功能模块,同时由主程序提供
友好的用户界面,使用户可通过选择主菜单来调用课程设计中要求完成的各个功能模
块,子程序执行完后还可以返回到主菜单,继续选择其他功能执行。
源程序要求书写
规范,结构清晰。
重点函数的重点变量,重点功能部分均要求给出清晰的程序注释。
5)程序调试
程序编译、链接成功后,自己设计实现程序功能的一组或多组测试数据,并严格按照
此测试数据进行测试,然后分析测试结果。
如果程序不能正常运行或结果不正确,则
需对程序进行单步调试,在调试过程中认真查找算法实现中存在的问题,并加以分析
和改正。
如果程序能够基本正确地运行,可考虑增加若干基本的容错功能(如避免用
户操作错误时程序出现死循环等);另外尽量对现有算法给出改进方案,并比较不同算
法之间的优缺点。
课程设计报告及书写内容要求
课程设计任务完成后,每位同学必须独立书写一份课程设计报告。
课程设计报告的内
容应包括以下部分:
1)需求分析。
包括设计题目、设计要求以及系统功能需求分析;
2)概要设计。
包括系统总体设计框架和系统功能模块图;
3)详细设计。
包括主要功能模块的算法设计思路以及对应的工作流程图;
4)主要源程序代码。
包括存储结构设计说明,以及完整源程序清单;
5)调试分析过程描述。
包括测试数据、测试输出结果,以及对程序调试过程中存在问题
的思考(列出主要问题的出错现象、出错原因、解决方法及效果等);
6)测试结果。
列出所有功能的运行界面,并作文字说明。
7)总结。
包括课程设计过程中的学习体会与收获、对 C 语言和本次课程设计的认识以及
自己的建议等内容。
8)源代码。
完整的 c 语言代码。
-1-
二○一七 ~二○一八学年第二学期
信息工程学院
课程设计报告书
课程名称:
高级语言程序设计
班级:
学号:
姓名:
指导教师:
薛海燕
二○一八年六月
-2-
1.题目 ................................................................................................4
2.功能 ................................................................................................4
3.要求 ................................................................................................4
4.设计内容 ........................................................................................4
4.1 主函数 MAIN().....................................................................................................4
4.2 初始化函数 STUDENT *INIT() .......................................................................4
4.3 菜单选择函数 INT MENU_SELECT(); ...................................................................4
4.4 输入记录函数 STUDENT *CREATE()................................................................5
4.5 显示记录函数 VOID PRINT(STUDENT *HEAD) .................................................5
4.6 查找记录函数 VOID SEARCH(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 保存数据到文件函数 VOID SAVE(STUDENT *HEAD) ....................................8
4.11 从文件读数据函数 STUDENT *LOAD() .........................................................8
5.调试分析 ........................................................................................9
6.测试结果 ........................................................................................9
7.总结 ..............................................................................................12
8.源代码 ..........................................................................................12
-3-
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 菜单选择函数 int menu_select();
这是一个无参函数,主要实现“功能选择”的界面,在这个界面里有显示系统的九大
功能,根据每个功能前面的序号进行选择,中间还显示系统当前的时间。
等执行完每一个
函数功能后,按任一键回到主界面也要通过这个函数来实现!
-4-
4.4 输入记录函数 STUDENT *create()
这是一个无参函数,用来执行第学生成绩记录的输入,当学生为0时停止输入,函数结
束后,带回一个指向链表头的指针head。
算法:
先声明一个首节点head,并将head->next设为NULL。
每输入一个数据就声明一
个新节点p,把p->next设为NULL,并且链接到之前列表的尾端。
N-S流程图如图1所示。
head=NULL
for(;;)
指针 p 指向新开辟的单元
指针 p 是否为空
是否
输入学号 p->num
输出p->num 是否为 0
内存是否
溢出输入姓名 p->name
停止for(i=0;i<3;i++)
输入输入成绩
返回p->sum=s;
菜单p->average=(float)s/3;
p->order=0;
p->next=head;head=p;
图 1 输入学生信息流程图
4.5 显示记录函数 void print(STUDENT *head)
这是一个不返回值的有参函数,形参为“链表头的指针”,负责对全部学生成绩记录
的输出,不足之处就是不能对学生成绩进行分页显示。
算法:
先将p结点的指针指向第一个结点,将p结点(即第一个结点)的数据输出。
然后
再将p结点的指针指向p指针的的指针(即下一结点),将p结点(即第一结点)的数据输出。
重
复执行此步聚直到p指针指向NULL为止。
N-S流程图如图2所示。
p=head,使指向第一个结点
输出 p 所指向的结点
p 指向一下个结点
当 p 指的不是表尾
图 2 显示学生信息流程图
4.6 查找记录函数 void search(STUDENT *head)
这是一个不返回值的有参函数,形参为“链表头的指针”,实现按学号对某个学生进
-5-
p1=head;
输入入要删除的学号 s
当(strcmp(p1->num,s))&& p1 !
= NULL
p2=p1 p1=p1->next
p1 是要删除的结点
是 否
p1 所指是头结点
是 否
head=p1->next p2->next=p1-next
(删除头结点)
输出”找不
到”
的信息“
行查找,并显示所查找到的记录。
算法:
采用线性查找法往下一个节点查找。
输入所要查找的学生的学号s,设一个指针
变量p,先指向第一个结点,当strcmp(p->name,s) && p !
= NULL时,使p后移一个结点,如
果p!
=NULL,输出p所指的结点。
N-S流程图如图3所示。
输入要查找的学生的学号 s
p=head,使 p 指向第一结点
当记录的学号不是要找的,或指针不为空时
p=p->next
p!
=NULL 如果指针不为空
是否
显示没有该
输出 p 所指向的结点学生
图 3 按照学号查找学生信息流程图
4.7 删除记录函数 STUDENT *delete(STUDENT *head)
这是一个有参函数,形参为“链表头的指针”,先输入要删除的学生记录的学号,找
到后显示该学生信息,等确认后便可按“Y”进行删除。
算法:
从p指向的第一个结点开始,检查该结点中的num值是否等于输入的要求删除的
那个学号。
如果相等就将该结点删除,如不相等,就将p后移一个结点,再如此进行下去,
直到遇到表尾为止。
N-S流程图如图4所示。
图 4 按照学号删除学生信息流程图
-6-
4.8 排序函数 STUDENT *sort(STUDENT *head)
这是一个有参函数,形参为“链表头的指针”,按学生成绩的平均分高低进行排序,
还可以显示名次。
N-S流程图如图5所示。
temp=head->next,head->next=NULL
当 temp!
=NULL 时
t=temp;temp=temp->next;p1=head;p2=head;
当 t->averageaverage&&p1!
=NULL 时
p2=p1;p1=p1->next;
p1=p2
是否
t->next=p1;t->next=p1;
head=t;p2->next=t;
p1=head;
当 p1!
=NULL 时
i++;p1->order=i;p1=p1->next;
输出“排序成功”
图 5 按照平均分降序排序流程图
4.9 插入函数 STUDENT *insert(STUDENT *head,STUDENT *new)
这是一个有参函数,形参有两个,一个是“链表头的指针”,一个是“待插入指针”,
按照原来成绩平均分的高低进行插入,插入后会重新进行排序,并返回。
算法:
先将学生的成绩按平均分由高分到低分进行排序,再插入一个新生的结点,要求
按平均分的高低顺序插入。
先用指针变量 p0 指向待插入的结点,p1 指向第一个结点。
如
果 p0->averageaverage,则待插入的结点不应插在 p1 所指的结点之前。
此时将 p1 后
移,并使 p2 指向刚才 p1 所指的结点。
重复以上的步骤,直到 p0->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->next。
最后再调用排
序的函数,将学生成绩重新排序.
N-S 流程图如图 6 所示
-7-
P1=head, p0=new
原来的链表是空表
是 否
将 p0 所指
的结点作为
唯一结点
当 p0->averageaverage 以及 p1 所指向的不是表尾结
点
p2 指向 p1 位置 p1 向后移一个结点
p0->average>=p1->average
是 否
p1 指向头结点
是 否
p1->next=p0
p0->next=NULL
(插到表尾之后)
head=p0
p0 ->next=p1
(插到表头之前)
p2->next=p0
p0->next=p1
(插到表中间)
n=n+1;(结点加 1)
head=sort(hear);(将成绩重新排序)
图 6 按照平均分有序插入新学生流程图
4.10 保存数据到文件函数 void save(STUDENT *head)
这是一个不返回值的有参函数,形参为“链表头的指针”,可以把学生记录保存在电脑
上由自己任意命名的二进制文件。
N-S 流程图如图 7 所示。
输入要保存记录的文件地址 outfile
文件不能打开
否是
p=head;
输出一个出错信
当 p 不为空时息,并返回菜单
fwrite(p,LEN,1,fp); (写入一条记录)
p=p->next; (指针后移)
fclose(fp); (关闭文件)
图 7 将学生信息保存到文件流程图
4.11 从文件读数据函数 STUDENT *load()
这是一个不返回值的有参函数,形参为“链表头的指针”,根据输入的文件地址进行读
取。
-8-
定义两个指针变量 p1,p2
输入要打开的记录文件地址 infile
文件不能打开
否 是
开辟一个新单元
返回菜单
指针 p1 是否为空
否 是
返回菜单
读入记录
fclose(fp); (关闭文件)
N-S 流程图如图 8 所示。
图 8 从文件读入学生信息流程图
5.调试分析
(1)刚开始没有那个初始化函数,程序运行后,没有输入任何数据就试得去执行显示
功能,结果显示的是一些乱码!
加入初始化函数后,这种现象也随之消失。
(2)刚开始执行输入函数,按学号顺序输入十个学生的成绩,输完后执行显示功能,
学生成绩记录是按学号的反顺序显示的,试着在其中增加一些语句,希望能把学号按正常
顺序显示,但暂时没有成功,所以在输入成绩时只能按学号反顺序输入,最后就按学号正
常顺序输出了。
(3)刚开始时,先把成绩按平均分排序,再插入一个学生的成绩,执行显示功能,虽
然插入的学生的成绩能正常插入,但该学生的名次为 0。
后来,在插入成绩之后,调用排
序函数,把所有成绩重新排序一次。
(4)在输入函数中设了一个无限循环,可以输入无数个学生的成绩信息,当学号为 0
的时候则停止输入。
(5)输入太多个学生的成绩时,屏幕显示不能控制为一页一页显示,所以为了方便起
见,不要输入太多记录,十七左右为最佳。
(6)在没有输入任何信息的情况下,去执行排序功能,最后显示有一个记录,学号、
姓名为空白,成绩都为 0,名次为 1。
(7)在输入选项时不能输入字母,否则会死循环,建议不要乱输字母。
***************这里写自己的调试过程,可以贴图并配以文字分析
*****************
6.测试结果
(1)主函数非法输入测试
如图 9 所示为主函数非法输入测试。
-9-
图 9 主函数非法输入测试
(2)登记入库测试如
图 10 所示登记入库界面。
图 10 登记入库测试
图 11 列出了图书馆中的所有藏书,表示,登记入库成功,高等数学数的现存量。
图 11 图书馆所有藏书一览
(3)读者登录数据测试
如图 12,为读者登陆测试界面。
-10-
图 12 读者登陆数据测试
(4)借书操作测试
如图 13 所示。
如借书成功,现存量减少。
图 13 借书操作测试
图 14 为读者的借阅情况。
图 14 读者的借阅情况
(5)还书操作测试
如图 15 所示。
选中需要还的高等数学书,还书成功,高等数学现存量重新变成 25。
-11-
图 15 还书操作
图 16 显示读者的借书情况中少了高等数学。
图 16 还书成功后的借阅情况
7.总结
***************这里写自己的心得体会,比如拿到题目之后如何一步一步实现的?
收
获的经验是什么?
程序中哪部分是碰到的难点?
如何解决这个难题的?
以后怎样做才能提
高程序设计课程的学习效果?
*****************
8.源代码
***************将 C 语言代码复制到这里*****************
-12-
学号
姓名
等级
对知识的理解和掌握
(占总成绩 25%)
知识理解透彻,且掌握扎实
基本理解所学知识
概念不清,没有理解所学知识
程序功能的完善程度
(占总成绩 15%)
完善
基本完善
不完善
程序结构的合理性
(占总成绩 15%)
合理
基本合理
不太合理
数据结构的合理性
(占总成绩 15%)
正确应用并有创新
正确应用
基本正确应用
学生的工作态度与
独立工作能力
(占总成绩 15%)
工作态度认真能独立完成任务
工作态度认真但独立性较差
工作态度基本认真但缺乏独立性
设计报告的规范性
(占总成绩 15%)
符合规范
基本符合规范
规范性较差
成绩等级
指导老师签字
时间
《高级语言程序设计课程设计》评分标准
-13-