c语言课程设计-.pdf
《c语言课程设计-.pdf》由会员分享,可在线阅读,更多相关《c语言课程设计-.pdf(50页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、课程设计任务书一、设计题目(一)学生成绩排名(二)根据条件进行学生成绩排名(三)链表的操作(链表的建立,访问,删除链表指定结点,增加结点)(四)学生成绩文件管理(五)一个综合系统(学生成绩管理系统)二、主要内容(一)学生成绩排名先采用选择法,将学生成绩从高到低进行排序,再输入一个学生的成绩,将此成绩按照排序规律插入已排好序的学生成绩数组,最后将排好序的成绩单进行反序存放。(二)根据条件进行学生成绩排名在函数中进行10 个学生成绩从高到低排名,再改进函数,进行 n 个学生成绩从高到低排名,排名方式根据函数的style 参数进行,如 style 为a按升序排,style 为 d 按降序排(a:as
2、cending 升,d:descending 降)。编写多个不同函数,使之能实现不同的排序算法(3 种以上),再编写一个通用输出函数,(要求用函数指针做参数)能分别打印不同排序算法的结果。(三)链表的操作(链表的建立,访问,删除链表指定结点,增加结点)建立一个动态链表,将学生数据(学号,成绩)存入链表结构中,实现链表的访问(求学生成绩的平均分,找到最高分,最低分,将其数据输出)。删除指定学号的学生数据,对学生数据进行排序,分别在链表头部,中间,末尾插入学生数据。(四)学生成绩文件管理定义一个结构体数组,存放10 个学生的学号,姓名,三门课的成绩,输出单门课成绩最高的学生的学号、姓名、以及该门课
3、程的成绩,输出三门课程的平均分数最高的学生的学号、姓名及其平均分,将 10 个学生的相关数据,存入文件中,再从文件中读出,按照平均分数从高到低进行排序,分别将结果输出到屏幕上和另一文件中,再从文件中读取第1,3,5,7,9个学生的数据。(五)学生成绩管理系统设计:数据库的数据项主要数据包括:学号、姓名、年级、专业、成绩1、成绩 2、成绩 3、平均成绩、总成绩。要求具有以下功能:(1)添加、删除任意个记录。(2)修改任意个记录。(3)显示、保存记录。(4)排序功能:打开学生数据库,计算每个学生的平均成绩和总成绩,用冒泡法或选择排序法将平均成绩和总成绩排序后生成两个新文件(从大到小),存盘并显示这
4、两个文件的全部记录。(5)查询功能:打开总成绩排序文件,用折半查找法统计出给定分数的人数并显示。三、具体要求围绕课程设计的目的和意义,基本要求如下:1、认真阅读 C 语言课程设计指导书,明确课程设计的目的、意义和要求;2、快速总结 C 程序设计语言的精髓,如:函数的概念、函数的设计和函数的调用;3、快速熟悉 Tuber C 或 C+的上机环境。能熟练进行高级编辑操作(特别是字块操作);熟悉步进式、断点跟踪的程序调试方法,提高工作效率。4、根据“课程设计题目”,采用结构化的程序设计思想,确定系统的总体设计方案、确 定时间进度。如果是多人共一题,则要首先完成小组内的人员分工及安排,不允许重题现象。
5、5学习并了解良好的程序设计风格。按质、按量、并按时间完成课程设计的任务。6提供可运行的课程设计系统,参加上机面试答辩。本次课程设计的重点是:学会设计并编写函数,掌握好各函数之间的调用关系;利用文件操作函数,建立数据库并完成对数据库的各种操作;掌握几种典型算法的应用(如:冒泡法、选择排序法和折半查找法)。同时锻炼学生根据题目进行分析、设计、编码、调试程序和书写必要文档的综合处理能力,从实践中学习并体会程序设计的结构化思想和设计方法。四、进度安排依照教学计划,课程设计时间为3 周。按照软件工程的思想,软件系统的分析设计至关重要,并要充分重视书写“文档”。避免甚至杜绝“拿到题目就编码”的现象。建议将
6、时间分为三个阶段:第一阶段,根据题目要求,拿出系统的总体设计方案:即构思各程序模块的算法,并画出相应的N-S 图,同时编写相应的文档;第二阶段,根据 N-S 图编写程序代码并单独调试,再将调试通过的各个子模块进行集成调试;第三阶段,归纳文档资料,按要求填写在 课程设计说明书 上,并参加答辩。三个阶段时间分配的大概比例是:35:45:20。五、完成后应上交的材料1课程设计的题目、系统的总功能和各子模块的功能;2题目的设计思想(或算法)简述;3主要程序的框图(要求用N-S图);4源程序代码(要求在关键的位置有注释,从而增加程序的可读性);5课程设计的总结报告,主要包括以下内容:(1)课程设计中遇到
7、的主要问题和解决方法;(2)你的创新和得意之处;(3)设计中存在的不足及改进的设想;(4)本次课程设计的感想和心得体会。以上完成的源程序及相关文档,填写在课程设计说明书上,要求干净整洁,符合课程设计的要求和规范。六、总评成绩指导教师签名日期年月日系 主 任审核日期年月日目录一、设计任务的主要算法分析,1 1.1 主要算法具体分析,2 二、程序的流程图,3 2 5 学生成绩管理系统的N-S图,8 1.系统总流程图模块,8 2.录入功能模块,9 3.删除功能模块,10 4.修改功能模块,11 5.文件保存功能模块,12 6.排序功能模块,13 7.查询功能模块,14 8.浏览功能模块,14 三、各
8、个模块的源代码,15 31 学生成绩排名,15 3 2 根据条件进行学生成绩排名,17 3 3 链表的操作,22 3 4 学生成绩文件管理,32 3 5 学生成绩管理系统,39 A.口令模块,39 B 菜单 模块,39 C.录入功能模块,41 D.删除功能模块,52 E.修改功能模块,50 F.文件保存模块,43 G.排序功能模块,48 H.查询功能模块,45 I.浏览功能模块,44 四、程序运行效果图,54 4.1 用户登陆画面,54 4.2 菜单显示画面,55 4.3 录入功能图示,56 4.4 删除功能图示,56 4.5 修改功能图示,56 4.6 文件保存图示,57 4.7 排序功能图
9、示,58 4.8 查询功能图示,58 4.9 浏览功能图示,59 五、设计心得,60 5.1 课程设计中遇到的主要问题和解决方法,60 5.2 本程序的创新和得意之处,60 5.3 设计中存在的不足及改进的设想,60 5.4 本次课程设计的感想和心得体会,60 佛山科学技术学院课程设计用纸1 一.算法分析初始化:建立空链表录入:录入学生信息到链表删除:删除指定的学生信息修改:修改学生信息保存:把链表记录存入文件排序:按平均分或总分排序查询:按总分查找学生信息浏览:向屏幕输出学生信息退出:退出系统定义学生的结构体如下:typedef struct Student/链表的数据结构 int numb
10、er;佛山科学技术学院课程设计用纸2 char name20;char grad20;char profess20;float score3;struct Student*next;Student,*LinkList;算法分析:这个学生信息系统主要是一个以动态链表的应用为基础加上C 的基础语法一起的一个综合系统程序。1 主程序是用 switch 函数做为一个功能的选择函数2 录入函数是一个建立动态链表的应用3 删除函数是一个链表的一个指针的变化程序利用指针的作用去“删除”(不再指向)不需要的信息和“插入”(指向)需要的信息。4 排序函数和删除函数其实是原理是差不多,都是利用了指针的指向作用,把
11、指向第二结构体的指针指向第一个,把第一个的指针指向第二个,那么两个结构体里面的位置就掉换了,就是我们所说排序。5 查询函数是一个在链表中按照总分查询出指定的学生6 浏览函数是一个将信息输出到屏幕的动态链表的应用7 保存文件函数是把链表中的信息存入文件中。0 退出程序,结束系统.佛山科学技术学院课程设计用纸3 二程序的流程图5 总流程图说明:这个基本是口令和菜单的结合体,用户先通过口令,密码输入三次错误则退出系统。密码正确进入系统功能键选择,根据SWITCH 选择菜单里面我们需要的功能。0 功能键是退出系统25.1 录入函数寻找最后一个节点while(!p-next)创建存储空间q=(LinkL
12、ist)malloc(sizeof(Student);是否逐项输入学生信息(学号、姓名、年级、专业、成绩1、成绩 2、成绩 3)显示录入后数据佛山科学技术学院课程设计用纸4 说明:这个函数把指针p 指向新开的空间,然后再向空间里面写如数据,进而做成我们所需要的链表。2.5.2 删除函数删除学生信息1 根据学号删除2 根据姓名删除if(p-number=number)是否strcmp(p-name,name)=0 是否删除该学号的学生信息没有可删除的学号删除该姓名的学生信息没有可删除的学生信息删除完成!说明:利用指针的指向性,当 STRCMP 函数=0时找到要删除的学生信息时,把指向这个信息结构
13、体的指针指向下一个结构体,把这个信息挡在链表外面,p2-next=p1next。佛山科学技术学院课程设计用纸5 2.5.3 修改函数修改学生信息1 根据学号查找修改2 根据姓名查找修改p-number=number;是否strcmp(p-name,name)=0 是否修改该学号的学生信息(根据菜单 switch(n))找不到数据!修改该姓名的学生信息(根据菜单switch(n))找不到数据!修改完成!输入要保存文件的文件名fp=fopen(stud,w)为读入内存打开一个文件打开是否成功是否存入数据输出提示不能打开文件退出 exit 用 fprintf函数读入数据while(p&p=p-nex
14、t)fclose(fp);关闭文件说明:用 if(p-number=number)比较学号是否相等,或用strcmp 函数找到需要修改的姓名,然后找到修改的数据,再输入需修改的信息。佛山科学技术学院课程设计用纸6 2.5.4 文件保存函数文件保存函数1 保存数据2 打开数据输入要打开文件的文件名 fp=fopen(stud,r)为读入内存打开一个文件打开是否成功是否存入数据输出提示不能打开文件退出 exit 定义一个动态的存储空间p=(LinkList)malloc(sizeof(Student)用 fprintf函数读入数据 fclose(fp);关闭文件说明:用fprintf函数写入文件,
15、while(p&p=p-next),将数据逐个存入文件。佛山科学技术学院课程设计用纸7 2.5.5 排序函数排序函数1 按平均分排序2 按总分排序ScoreSort(L);输出按平均分排序的学生信息ScoreSort(L);按总分排序的学生信息输入要保存文件的文件名 fp=fopen(stud,w)为读入内存打开一个文件打开是否成功是否存入数据输出提示不能打开文件退出 exit 用 fprintf函数读入数据while(p&p=p-next)fclose(fp);关闭文件说明:选择按平均分排序还是总分排序,将排好序的学生信息存入新文件中。佛山科学技术学院课程设计用纸8 2.5.6 查询函数输入
16、要打开总分的文件名 fp=fopen(stud,r)为读入新链表打开一个文件打开是否成功是否存取数据输出提示不能打开文件退出 exit 用 fscanf 函数读入数据p=(LinkList)malloc(sizeof(Student);p-next=NULL;fclose(fp);关闭文件输入你要找的分数HalfSort()是否找到是否找到一人!不存在与指定分数相同的学生!说明:打开总成绩排序文件,用折半查找法统计出给定分数的人数并显示。佛山科学技术学院课程设计用纸9 2.5.7 浏览函数输入要打开的文件名fp=fopen(stud,r)为读入新链表打开一个文件打开是否成功是否存取数据输出提示
17、不能打开文件退出 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-score0,p-score1,p-score2);p=p-next;说明:打开要读取的文件,将学生数据读到新链表while(p!=0)p=p-next;,浏览学生信息。佛
18、山科学技术学院课程设计用纸10 三原代码程序31 学生成绩排名#include void main()void sort(int array,int n);int a11;int i;printf(请输入 10 个学生成绩:n);for(i=0;i10;i+)scanf(%d,&ai);sort(a,10);/调用 sort 函数printf(已排好序的 10 个数:n);for(i=0;i10;i+)printf(%d,ai);printf(n);printf(第十一个学生成绩:n);scanf(%d,&a10);sort(a,11);printf(已排好序的 11 个数:n);for(i=
19、0;i=0;i-)printf(%d,ai);printf(n);void sort(int array,int n)/选择法排序函数 int i,j,k,t;for(i=0;in-1;i+)k=i;/k用来存放当前最大的元素的序号for(j=i+1;jarrayk)/若第 j 个元素比第 k 个元素大k=j;/将当前最小元素的序号j 保存在 k 中t=arrayk;arrayk=arrayi;arrayi=t;/将最大元素与 arrayi对换 32 根据条件进行学生成绩排名#include void sort(int a,int n,char style)/选择法排序函数 int i,j;佛
20、山科学技术学院课程设计用纸12 if(style=d)for(i=0;in-1;i+)for(j=i+1;jn;j+)if(aiaj)int t;t=ai;ai=aj;/将最大元素与 ai对换aj=t;else if(style=a)for(i=0;in-1;i+)for(j=i+1;jaj)int t;t=ai;ai=aj;/将最小元素与 ai对换aj=t;int*mosort(int a,int n)/冒泡法升序函数佛山科学技术学院课程设计用纸13 int i,j,t;for(j=0;jn-1;j+)for(i=0;iai+1)t=ai;ai=ai+1;ai+1=t;return a;in
21、t*mosort1(int a,int n)/冒泡法降序函数 int i,j,t;for(j=0;jn-1;j+)for(i=0;in-j-1;i+)if(aiai+1)t=ai;ai=ai+1;ai+1=t;return a;佛山科学技术学院课程设计用纸14 int*sort1(int a,int n)/选择法降序函数 int i,j,t;for(i=0;in-1;i+)for(j=i+1;jn;j+)if(aiaj)t=ai;ai=aj;aj=t;return a;int*sort(int a,int n)/选择法升序函数 int i,j,t;for(i=0;in-1;i+)for(j=i
22、+1;jaj)t=ai;ai=aj;aj=t;佛山科学技术学院课程设计用纸15 return a;void show(int*(*fun)(int*,int),int*a,int n)/输出函数 int i;fun(a,n);printf(排序结果为:n);for(i=0;in;i+)printf(%d,ai);printf(n);void main()int a1000,i,n;char style;printf(请输入学生人数和排序类型n);printf(a、将学生成绩按升序排列:n);printf(d、将学生成绩按降序排列:n);scanf(%d,%c,&n,&style);printf
23、(请输入各个学生的成绩:n);佛山科学技术学院课程设计用纸16 for(i=0;in;i+)scanf(%d,&ai);sort(a,n,style);printf(输出的学生成绩为:n);for(i=0;in;i+)printf(%d n,ai);printf(n);printf(选择法升序:n);show(&sort,a,n);printf(选择法降序:n);show(&sort1,a,n);printf(冒泡法升序:n);show(&mosort,a,n);printf(冒泡法降序:n);show(&mosort1,a,n);33 链表的操作#include#include typede
24、f struct Student/链表的数据结构佛山科学技术学院课程设计用纸17 int number;float score3;float aver;struct Student*next;Student,*LinkList;void CreateList(LinkList&L,int n)/初始化链表 L=(LinkList)malloc(sizeof(Student);L-next=NULL;for(int i=0;inumber),&(p-score0),&(p-score1),&(p-score2);p-next=L-next;L-next=p;void FrontInsert(Li
25、nkList&L,int number,float score1,float score2,float score3)/头插入结点 LinkList p=(LinkList)malloc(sizeof(Student);佛山科学技术学院课程设计用纸18 p-next=L-next;L-next=p;p-number=number;p-score0=score1;p-score1=score2;p-score2=score3;void RearInsert(LinkList&L,int number,float score1,float score2,float score3)/尾插入结点 Li
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 语言 课程设计
限制150内