C语言课程设计报告示例.docx

上传人:b****5 文档编号:4411399 上传时间:2022-12-01 格式:DOCX 页数:17 大小:55.30KB
下载 相关 举报
C语言课程设计报告示例.docx_第1页
第1页 / 共17页
C语言课程设计报告示例.docx_第2页
第2页 / 共17页
C语言课程设计报告示例.docx_第3页
第3页 / 共17页
C语言课程设计报告示例.docx_第4页
第4页 / 共17页
C语言课程设计报告示例.docx_第5页
第5页 / 共17页
点击查看更多>>
下载资源
资源描述

C语言课程设计报告示例.docx

《C语言课程设计报告示例.docx》由会员分享,可在线阅读,更多相关《C语言课程设计报告示例.docx(17页珍藏版)》请在冰豆网上搜索。

C语言课程设计报告示例.docx

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-

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 高中教育 > 小学教育

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1