c语言课程设计.docx
- 文档编号:26270309
- 上传时间:2023-06-17
- 格式:DOCX
- 页数:64
- 大小:204.70KB
c语言课程设计.docx
《c语言课程设计.docx》由会员分享,可在线阅读,更多相关《c语言课程设计.docx(64页珍藏版)》请在冰豆网上搜索。
c语言课程设计
课程设计任务书
一、设计题目
(一)学生成绩排名
(二)根据条件进行学生成绩排名
(三)链表的操作(链表的建立,访问,删除链表指定结点,
增加结点)
(四)学生成绩文件管理
(五)一个综合系统(学生成绩管理系统)
二、主要内容
(一)学生成绩排名
先采用选择法,将学生成绩从高到低进行排序,再输入一个学生的成绩,将此成绩按照排序规律插入已排好序的学生成绩数组,最后将排好序的成绩单进行反序存放。
(二)根据条件进行学生成绩排名
在函数中进行10个学生成绩从高到低排名,再改进函数,进行n个学生成绩从高到低排名,排名方式根据函数的style参数进行,
如style为‘a'按升序排,style为'd'按降序排(a:
ascending升,d:
descending降)。
编写多个不同函数,使之能实现不同的排序算法(3种以上),再编写一个通用输出函数,(要求用函数指针做参数)能分别打印不同排序算法的结果。
(三)链表的操作(链表的建立,访问,删除链表指定结点,增加结点)
建立一个动态链表,将学生数据(学号,成绩)存入链表结构中,实现链表的访问(求学生成绩的平均分,找到最高分,最低分,将其数据输出)。
删除指定学号的学生数据,对学生数据进行排序,分别在链表头部,中间,末尾插入学生数据。
(四)学生成绩文件管理
定义一个结构体数组,存放10个学生的学号,姓名,三门课的成绩,输出单门课成绩最高的学生的学号、姓名、以及该门课程的成绩,输出三门课程的平均分数最高的学生的学号、姓名及其平均分,将10个学生的相关数据,存入文件中,再从文件中读出,按照平均分数从高到低进行排序,分别将结果输出到屏幕上和另一文件中,再从文件中读取第1,3,5,7,9个学生的数据。
(五)学生成绩管理系统设计:
数据库的数据项主要数据包括:
学号、姓名、年级、专业、成绩1、成绩2、成绩3、平均成绩、总成绩。
要求具有以下功能:
(1)添加、删除任意个记录。
(2)修改任意个记录。
(3)显示、保存记录。
(4)排序功能:
打开学生数据库,计算每个学生的平均成绩和总成绩,用冒泡法或选择排序法将平均成绩和总成绩排序后生成两个新文件(从大到小),存盘并显示这两个文件的全部记录。
(5)查询功能:
打开总成绩排序文件,用折半查找法统计出给定分数的人数并显示。
三、具体要求
围绕课程设计的目的和意义,基本要求如下:
、认真阅读《C语言课程设计》指导书,明确课程设计的目的、1
意义和要求;
2、快速总结C程序设计语言的精髓,如:
函数的概念、函数的设计和函数的调用;
3、快速熟悉TuberC或C++的上机环境。
能熟练进行高级编辑操作(特别是字块操作);熟悉步进式、断点跟踪的程序调试方法,提高工作效率。
4、根据“课程设计题目”,采用结构化的程序设计思想,确定系统的总体设计方案、确"定时间进度。
如果是多人共一题,则要首先完成小组内的人员分工及安排,不允许重题现象。
5(学习并了解良好的程序设计风格。
按质、按量、并按时间完成课程设计的任务。
6(提供可运行的课程设计系统,参加上机面试答辩。
本次课程设计的重点是:
学会设计并编写函数,掌握好各函数之间的调用关系;利用文件操作函数,建立数据库并完成对数据库的各种操作;掌握几种典型算法的应用(如:
冒泡法、选择排序法和折半查找法)。
同时锻炼学生根据题目进行分析、设计、编码、调试程序和书写必要文档的综合处理能力,从实践中学习并体会程序设计的结构化思想和设计方法。
四、进度安排
依照教学计划,课程设计时间为3周。
按照软件工程的思想,软件系统的分析设计至关重要,并要充分重视书写“文档”。
避免甚至杜绝“拿到题目就编码”的现象。
建议将时间分为三个阶段:
第一阶段,根据题目要求,拿出系统的总体设计方案:
即构思各程序模块的算法,并画出相应的N-S图,同时编写相应的文档;第二阶段,根据N-S图编写程序代码并单独调试,再将调试通过的各个子模块进行集成调试;
第三阶段,归纳文档资料,按要求填写在《课程设计说明书》上,并参加答辩。
三个阶段时间分配的大概比例是:
35:
45:
20。
五、完成后应上交的材料
1(课程设计的题目、系统的总功能和各子模块的功能;
2(题目的设计思想(或算法)简述;
3(主要程序的框图(要求用N-S图);
4(源程序代码(要求在关键的位置有注释,从而增加程序的可读性);
5(课程设计的总结报告,主要包括以下内容:
(1)课程设计中遇到的主要问题和解决方法;
2)你的创新和得意之处;(
(3)设计中存在的不足及改进的设想;
(4)本次课程设计的感想和心得体会。
以上完成的源程序及相关文档,填写在《课程设计说明书》上,要求干净整洁,符合课程设计的要求和规范。
六、总评成绩
指导教师签名日期年月日
系主任审核日期年月日
一、设计任务的主要算法分析„„„„„„„„„„„„„„„„„11.1主要算法具体分析„„„„„„„„„„„„„„„„„„2
二、程序的流程图„„„„„„„„„„„„„„„„„„„„„„32(5学生成绩管理系统的N-S图„„„„„„„„„„„„„„8
1.系统总流程图模块„„„„„„„„„„„„„„„„8
2.录入功能模块„„„„„„„„„„„„„„„„„„9
3.删除功能模块„„„„„„„„„„„„„„„„10
4.修改功能模块„„„„„„„„„„„„„„„„„„11
5.文件保存功能模块„„„„„„„„„„„„„„12
6.排序功能模块„„„„„„„„„„„„„„„13
7.查询功能模块„„„„„„„„„„„„„„„„„14
8.浏览功能模块„„„„„„„„„„„„„„„14
三、各个模块的源代码„„„„„„„„„„„„„„„„„„„153(1学生成绩排名„„„„„„„„„„„„„„„„„„„153(2根据条件进行学生成绩排名„„„„„„„„„„„„„„173(3链表的操作„„„„„„„„„„„„„„„„„„„„„22(4学生成绩文件管理„„„„„„„„„„„„„„„„„„323
3(5学生成绩管理系统„„„„„„„„„„„„„„„„„„39
A.口令模块„„„„„„„„„„„„„„„„„„39
B菜单模块„„„„„„„„„„„„„„„„„„39
C.录入功能模块„„„„„„„„„„„„„„„„„„41
D.删除功能模块„„„„„„„„„„„„„„„„„„„52
E.修改功能模块„„„„„„„„„„„„„„„„„„„50
F.文件保存模块„„„„„„„„„„„„„„„„„„43G.排序功能模块„„„„„„„„„„„„„„„„„„„48H.查询功能模块„„„„„„„„„„„„„„„„„„„45I.浏览功能模块„„„„„„„„„„„„„„„„„„„44
„„„„„„„„„„„„„„„„„„„„54四、程序运行效果图
4.1用户登陆画面„„„„„„„„„„„„„„„„„„544.2菜单显示画面„„„„„„„„„„„„„„„„„„554.3录入功能图示„„„„„„„„„„„„„„„„„„564.4删除功能图示„„„„„„„„„„„„„„„„„„564.5修改功能图示„„„„„„„„„„„„„„„„„„564.6文件保存图示„„„„„„„„„„„„„„„„„„„574.7排序功能图示„„„„„„„„„„„„„„„„„„„584.8查询功能图示„„„„„„„„„„„„„„„„„„„584.9浏览功能图示„„„„„„„„„„„„„„„„„„„59
五、设计心得„„„„„„„„„„„„„„„„„„„„„„605.1课程设计中遇到的主要问题和解决方法„„„„„„„605.2本程序的创新和得意之处„„„„„„„„„„„„„605.3设计中存在的不足及改进的设想„„„„„„„„„„605.4本次课程设计的感想和心得体会„„„„„„„„„„60
佛山科学技术学院课程设计用纸
一.算法分析
初始化:
建立空链表
录入:
录入学生信息到链表
删除:
删除指定的学生信息
修改:
修改学生信息
保存:
把链表记录存入文件
排序:
按平均分或总分排序
查询:
按总分查找学生信息
浏览:
向屏幕输出学生信息
退出:
退出系统
定义学生的结构体如下:
typedefstructStudent//链表的数据结构{
intnumber;
1
佛山科学技术学院课程设计用纸
charname[20];
chargrad[20];
charprofess[20];
floatscore[3];
structStudent*next;}Student,*LinkList;
算法分析:
这个学生信息系统主要是一个以动态链表的应用为基础加上C的基础语法一起的一个综合系统程序。
1主程序是用switch函数做为一个功能的选择函数
2录入函数是一个建立动态链表的应用
3删除函数是一个链表的一个指针的变化程序利用指针的作用去“删除”(不再指向)不需要的信息和“插入”(指向)需要的信息。
4排序函数和删除函数其实是原理是差不多,都是利用了指针的指向作用,把指向第二结构体的指针指向第一个,把第一个的指针指向第二个,那么两个结构体里面的位置就掉换了,就是我们所说排序。
5查询函数是一个在链表中按照总分查询出指定的学生6浏览函数是一个将信息输出到屏幕的动态链表的应用
7保存文件函数是把链表中的信息存入文件中。
0退出程序,结束系统.
2
佛山科学技术学院课程设计用纸
二(程序的流程图5总流程图
说明:
这个基本是口令和菜单的结合体,用户先通过口令,密码输入三次错误则退出系统。
密码正确进入系统功能键选择,根据SWITCH选择菜单里面我们需要的功能。
0功能键是退出系统
2(5.1录入函数
寻找最后一个节点while(~p->next)
创建存储空间
q=(LinkList)malloc(sizeof(Student));
是否逐项输入学生信息(学号、姓名、年级、专业、成绩1、成绩2、成绩3)
显示录入后数据
3
佛山科学技术学院课程设计用纸
说明:
这个函数把指针p指向新开的空间,然后再向空间里面写如数据,进而做成我们所需要的链表。
.5.2删除函数2
删除学生信息
1根据学号删除2根据姓名删除
strcmp(p->name,name)==0if(p->number==number)
是否是否
没有可删除的删除该姓名的没有可删除的删除该学号的
学号学生信息学生信息学生信息
删除完成~
说明:
利用指针的指向性,当STRCMP函数=0时找到要删除的学生信息时,把指向这个信息结构体的指针指向下一个结构体,把这个信息挡在链表外面,p2-》next=p1》next。
4
佛山科学技术学院课程设计用纸
2.5.3修改函数
修改学生信息
1根据学号查找修改2根据姓名查找修改
strcmp(p->name,name)==0p->number==number;
是否是否
修改该学号的学
找不到数据!
修改该姓名找不到数据!
生信息(根据菜的学生信息
(根据菜单单switch(n))
switch(n))
修改完成~
输入要保存文件的文件名
fp=fopen("stud","w")为读入内存打开一个文件
打开是否成功
是是否存入数据输出提示不能打开文件
退出exit
用fprintf函数读入数据
while(p&&p=p->next)
fclose(fp);关闭文件
说明:
用if(p->number==number)比较学号是否相等,或用strcmp函数找到需要修改的姓名,然后找到修改的数据,再输入需修改的信息。
5
佛山科学技术学院课程设计用纸
2.5.4文件保存函数
文件保存函数
1保存数据2打开数据输入要打开文件的文件名
fp=fopen("stud","r")为读入内存打开一个文件
打开是否成功
是否
存入数据输出提示不能打开文件
退出exit
定义一个动态的存储空间
p=(LinkList)malloc(sizeof(Student))
用fprintf函数读入数据
fclose(fp);
关闭文件
说明:
用fprintf函数写入文件,while(p&&p=p->next),将数据逐个存入文件。
6
佛山科学技术学院课程设计用纸
2.5.5排序函数
排序函数
1按平均分排序2按总分排序ScoreSort(L);ScoreSort(L);输出按平均分排序的学生信息按总分排序的学生信息
输入要保存文件的文件名
fp=fopen("stud","w")为读入内存打开一个文件
打开是否成功
是否
存入数据输出提示不能打开文件
退出exit
用fprintf函数读入数据
while(p&&p=p->next)
fclose(fp);关闭文件
说明:
选择按平均分排序还是总分排序,将排好序的学生信息存入新文件中。
7
佛山科学技术学院课程设计用纸
2.5.6查询函数
输入要打开总分的文件名
fp=fopen("stud","r")为读入新链表打开一个文件
打开是否成功
是否
存取数据输出提示不能打开文件
退出exit
用fscanf函数读入数据
p=(LinkList)malloc(sizeof(Student));
p->next=NULL;
fclose(fp);关闭文件
输入你要找的分数
HalfSort()
是否找到
是否找到一人~不存在与指定分数相同的学生~
说明:
打开总成绩排序文件,用折半查找法统计出给定分数的人数并显示。
8
佛山科学技术学院课程设计用纸
2.5.7浏览函数
输入要打开的文件名
fp=fopen("stud","r")为读入新链表打开一个文件
打开是否成功
是否存取数据输出提示不能打开文件
退出exit
用fscanf函数读入数据
p=(LinkList)malloc(sizeof(Student));
fclose(fp);关闭文件
printf(“学号、姓名、年级、专业、成绩1、成绩2、成绩3”)
while(p!
=0)
printf("学号:
%d,姓名:
%s,年级:
%s,专业:
%s三门成
绩:
%3.2f%3.2f%3.2f
\n",p->number,p->name,p->grad,p->profess,p
->score[0],p->score[1],p->score[2]);
p=p->next;
说明:
打开要读取的文件,将学生数据读到新链表while(p!
=0)p=p->next;,浏览学生信息。
9
佛山科学技术学院课程设计用纸
三(原代码程序
3(1学生成绩排名
#include
{
voidsort(intarray[],intn);
inta[11];
inti;
printf("请输入10个学生成绩:
\n");
for(i=0;i<10;i++)
scanf("%d",&a[i]);
sort(a,10);//调用sort函数
printf("已排好序的10个数:
\n");
for(i=0;i<10;i++)
printf("%d",a[i]);
printf("\n");
printf("第十一个学生成绩:
\n");
scanf("%d",&a[10]);
sort(a,11);
printf("已排好序的11个数:
\n");
for(i=0;i<11;i++)
printf("%d",a[i]);
printf("\n");
10
佛山科学技术学院课程设计用纸
printf("已排好序的11个数的逆序:
\n");
for(i=10;i>=0;i--)
printf("%d",a[i]);
printf("\n");
}
voidsort(intarray[],intn)//选择法排序函数
{
inti,j,k,t;
for(i=0;i { k=i;//k用来存放当前最大的元素的序号 for(j=i+1;j if(array[j]>array[k])//若第j个元素比第k个元素大 k=j;//将当前最小元素的序号j保存在k中 t=array[k];array[k]=array[i];array[i]=t; //将最大元素与array[i]对换 } } 3(2根据条件进行学生成绩排名 #include voidsort(inta[],intn,charstyle)//选择法排序函数{ inti,j; 11 佛山科学技术学院课程设计用纸 if(style=='d') { for(i=0;i for(j=i+1;j if(a[i] intt; t=a[i]; a[i]=a[j];//将最大元素与a[i]对换 a[j]=t;} } } elseif(style=='a') { for(i=0;i for(j=i+1;j if(a[i]>a[j]){ intt; t=a[i]; a[i]=a[j];//将最小元素与a[i]对换 a[j]=t;} } } } int*mosort(inta[],intn)//冒泡法升序函数 12 佛山科学技术学院课程设计用纸 { inti,j,t; for(j=0;j for(i=0;i if(a[i]>a[i+1]){ t=a[i]; a[i]=a[i+1]; a[i+1]=t; } } returna; } int*mosort1(inta[],intn)//冒泡法降序函数{ inti,j,t; for(j=0;j for(i=0;i if(a[i] t=a[i]; a[i]=a[i+1]; a[i+1]=t; } } returna; 13 佛山科学技术学院课程设计用纸 } int*sort1(inta[],intn)//选择法降序函数{ inti,j,t;
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 语言 课程设计