




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、课程设计说明书设计名称: 程序设计语言强化课程设计 题 目: 图书信息管理系统设计 学生姓名: 专 业: 网络工程 班 级: 07网络工程 2 学 号: 指导教师: 日 期: 2009 年 3 月 23日课程设计任务书 网络工程 专业 07 年级 2 班 一、 设计题目(1) 学生成绩排名(2) 根据条件进行学生成绩排名(3) 链表的操作(链表的建立,访问,删除链表指定结点,增加结点)(4) 学生成绩文件管理 (5) 一个综合系统(图书信息管理系统)二、 主要内容 (一)学生成绩排名先采用选择法,将学生成绩从高到低进行排序,再输入一个学生的成绩,将此成绩按照排序规律插入已排好序的学生成绩数组,
2、最后将排好序的成绩单进行反序存放。(二) 根据条件进行学生成绩排名在函数中进行 10个学生成绩从高到低排名, 再改进函数, 进行 n个学生成绩从高到低排名, 排名方式根据函数的style参数进行,如style为a按升序排,style为 d 按降序排( a:ascending 升,d:descending 降)。 编写多个不同函数,使之能实现不同的排序算法(3种以上),再编写一个通用输出函数,(要求用函数指针做参数)能分别打印不同排序算法的结果。(三)链表的操作(链表的建立,访问,删除链表指定结点,增加结点) 建立一个动态链表,将学生数据(学号,成绩)存入链表结构中,实现链表的访问(求学生成绩的
3、平均分,找到最高分,最低分,将其数据输出)。删除指定学号的学生数据,对学生数据进行排序,分别在链表头部,中间,末尾插入学生数据。 (四) 学生成绩文件管理 定义一个结构体数组,存放10个学生的学号,姓名,三门课的成绩,输出单门课成绩最高的学生的学号、姓名、以及该门课程的成绩,输出三门课程的平均分数最高的学生的学号、姓名及其平均分,将10个学生的相关数据,存入文件中,再从文件中读出,按照平均分数从高到低进行排序,分别将结果输出到屏幕上和另一文件中,再从文件中读取第 1 ,3 , 5 ,7, 9个学生的数据。 (五)图书信息管理系统设计: 图书信息包括:登录号、书名、作者名、分类号、出版单位、出版
4、时间、价格等。试设计一图书信息管理系统,使之能提供以下功能:(1)系统以菜单方式工作。v(2)图书信息录入功能输入。v(3)图书信息浏览功能输出。(4)查询和排序功能:(至少一种查询方式)算法。vl 按书名查询l 按作者名查询(5)图书信息的删除与修改。三、 具体要求 围绕课程设计的目的和意义,基本要求如下:1、认真阅读c语言课程设计指导书,明确课程设计的目的、意义和要求;2、快速总结c程序设计语言的精髓,如:函数的概念、函数的设计和函数的调用; 3、快速熟悉tuber c 或c+的上机环境。能熟练进行高级编辑操作(特别是字块操作);熟悉步进式、断点跟踪的程序调试方法,提高工作效率。 4、根据
5、“课程设计题目”,采用结构化的程序设计思想,确定系统的总体设计方案、确定时间进度。如果是多人共一题,则要首先完成小组内的人员分工及安排,不允许重题现象。5学习并了解良好的程序设计风格。按质、按量、并按时间完成课程设计的任务。6提供可运行的课程设计系统,参加上机面试答辩。本次课程设计的重点是:学会设计并编写函数,掌握好各函数之间的调用关系;利用文件操作函数,建立数据库并完成对数据库的各种操作;掌握几种典型算法的应用(如:冒泡法、选择排序法和折半查找法)。同时锻炼学生根据题目进行分析、设计、编码、调试程序和书写必要文档的综合处理能力,从实践中学习并体会程序设计的结构化思想和设计方法。四、 进度安排
6、依照教学计划,课程设计时间为3周。按照软件工程的思想,软件系统的分析设计至关重要,并要充分重视书写“文档”。避免甚至杜绝“拿到题目就编码”的现象。建议将时间分为三个阶段:第一阶段,根据题目要求,拿出系统的总体设计方案:即构思各程序模块的算法,并画出相应的n-s图,同时编写相应的文档;第二阶段,根据n-s图编写程序代码并单独调试,再将调试通过的各个子模块进行集成调试; 第三阶段,归纳文档资料,按要求填写在课程设计说明书上,并参加答辩。 三个阶段时间分配的大概比例是: 35:45:20。五、 完成后应上交的材料1课程设计的题目、系统的总功能和各子模块的功能;2题目的设计思想(或算法)简述;3主要程
7、序的框图(要求用n-s图);4源程序代码(要求在关键的位置有注释,从而增加程序的可读性);5课程设计的总结报告,主要包括以下内容:(1)课程设计中遇到的主要问题和解决方法;(2)你的创新和得意之处;(3)设计中存在的不足及改进的设想;(4)本次课程设计的感想和心得体会。以上完成的源程序及相关文档,填写在课程设计说明书上,要求干净整洁,符合课程设计的要求和规范。六、 总评成绩指导教师 签名日期 年 月 日系 主 任 审核日期 年 月 日目 录一、设计任务的主要算法分析11.1主要算法具体分析 2二、程序的流程图321学生成绩排名322根据条件进行学生成绩排名423链表的操作724学生成绩文件管理
8、725图书信息管理系统的n-s图81. 系统总流程图模块 82. 录入功能模块 93.浏览功能模块 104. 查询功能模块115. 排序功能模块 126. 删除功能模块 137. 修改功能模块 148. 文件保存功能模块 14三、各个模块的源代码 1531学生成绩排名1532根据条件进行学生成绩排名1733链表的操作2234学生成绩文件管理3235图书信息管理系统39a.主函数 39 b.口令功能模块 39c.菜单功能模块 40d.录入功能模块 41e.文件保存模块 43f.浏览功能模块 44h.查询功能模块 45i.排序功能模块 48j.修改功能模块 50k.删除功能模块 52四、程序运行效
9、果图 544.1 用户登陆画面 544.2 菜单功能模块 554.3 录入功能图示 564.4 浏览功能图示 564.5 查询功能图示 574.6排序功能图示584.7修改功能图示584.8删除功能图示59 五、设计心得 605.1 课程设计中遇到的主要问题和解决方法 605.2 本程序的创新和得意之处 60 5.3 设计中存在的不足及改进的设想 605.4 本次课程设计的感想和心得体会60课程设计用纸一.算法分析 初始化:建立空链表录入:录入图书信息到链表浏览:向屏幕输出图书信息(就是读出函数)查询:按书名或作者名查找图书删除:删除图书信息排序:按照书名排序保存:把链表记录保存成文件退出:退
10、出程序定义图书信息的结构体如下:struct librarylong num;char bookname20;char author20;char type20;char publishing_house20; char publishing_time20;float sale;struct library *next;算法分析:这个图书室信息系统主要是一个以动态链表的应用为基础加上c的基础语法一起的一个综合系统程序。1主程序是用switch函数做为一个功能的选择函2录入函数是一个建立动态链表的应用3浏览函数是一个输出动态链表的应用3查询函数是一个在链表中应用到各种“找值”函数的程序,例如按作
11、者名或者书名找图书信息的话就要用字符串查找算法等等。4删除函数是一个链表的一个指针的变化程序利用指针的作用去“删除”(不再指向)掉我们不需要的信息和“插入”(指向)我们需要的信息。5排序函数和删除函数其实是原理是差不多,都是利用了指针的指向作用,把指向第二结构体的指针指向第一个,把第一个的指针指向第二个,那么两个结构体里面的位置就掉换了,就是我们所说排序。6保存文件函数是把链表中的信息保存起来。7退出程序函数是结束这个程序.二程序的流程图2.1学生成绩排名2.2根据条件进行学生成绩排名输入成绩的学生数mi=0;输入m个学生的成绩biim选择排序算法k:a:选择法升序、b:选择法降序、c:冒泡法
12、升序、d:冒泡法降序调用函数sort(b,m,k);i=0;输出biinext!=0时一个一个吧数据写入文件知道p=null为止。三原代码程序31学生成绩排名#includevoid main()/*这是主函数*/int a11,i,j,t;printf(请输入10个学生的成绩n);for(i=0;i10;i+)scanf(%d,&ai);printf(10个学生的成绩从高到低排列的顺序为n);/*10个学生成绩排列代码*/for(i=0;i10;i+)for(j=i+1;j10;j+)if(aiaj)t=ai;ai=aj;aj=t;printf(%d ,ai);printf(n请再输入一个学
13、生的成绩n);scanf(%d,&a10);printf(11个学生的成绩从高到低排列的顺序为n);/*11个学生成绩排列代码*/for(i=0;i11;i+)for(j=i+1;j11;j+)if(aiaj)t=ai;ai=aj;aj=t;printf(%d ,ai);printf(n11个学生成绩的反序排列为n);/*11个学生成绩的反序排列代码*/for(i=0;i=5;i+) t=ai; ai=a10-i; a10-i=t;for(i=0;i11;i+)printf(%d ,ai);printf(n);32根据条件进行学生成绩排名#includevoid main()/*这是主的函数*
14、/int *sort1(int a,int n);int *sort2(int a,int n);int *sort3(int a,int n);int *sort4(int a,int n);int show(int x,int y,int(*(*fun)(int a,int n);int sort(int a,int n,char style);int b100,i,m;char c1;printf(要输入成绩的学生数nn);scanf(%d,&m);printf(请输入%d个学生的成绩n,m);for(i=0;im;i+)scanf(%d,&bi);printf(请选择排练方式na:选择
15、升序法nd:选择降序法na:冒泡升序法nd:冒泡降序法n);scanf(%s,&c1);sort(b,m,c1); printf(%d个学生成绩排列后的顺序n,m);for(i=0;im;i+)printf(%d ,bi);printf(n);int sort(int a,int n,char style)/*这是根据调用show函数的函数*/ if(style=a) show(a,n,sort1); else if(style=d) show(a,n,sort2); else if(style=a) show(a,n,sort3); else if(style=d) show(a,n,sor
16、t4); return(*a); int *sort1(int a,int n)/*这是选择法升序的函数*/int i,j,t;for(i=0;in;i+)for(j=i+1;jn;j+)if(ajai) t=ai; ai=aj; aj=t;return(a);int *sort2(int a,int n)/*这是选择法降序的函数*/int i,j,t;for(i=0;in;i+)for(j=i+1;jai) t=ai; ai=aj; aj=t; return(a);int *sort3(int a,int n)/*这是冒泡法升序的函数*/int i,j,t;for(j=0;jn-1;j+)f
17、or(i=0;iai+1) t=ai; ai=ai+1; ai+1=t; return(a);int *sort4(int a,int n)/*这是冒泡法升序的函数*/int i,j,t;for(j=0;jn-1;j+)for(i=0;in-1-j;i+)if(aiai+1) t=ai; ai=ai+1; ai+1=t; return(a);int show(int x,int y,int (*(* fun)(int a,int n)/*这是show通用输出函数*/int *z;z=(* fun)(x,y);return(*z);33链表的操作#include#include#define l
18、en sizeof(struct student)struct studentlong num;float score;struct student *next;int n;struct student *creat(void)/*这是建立链表函数*/struct student *head;struct student *p1,*p2;n=0;p1=p2=(struct student *)malloc(len);scanf(%ld,%f,&p1-num,&p1-score);head=null;while(p1-num!=0)n=n+1;if(n=1)head=p1;else p2-nex
19、t=p1;p2=p1;p1=(struct student *)malloc(len);scanf(%ld,%f,&p1-num,&p1-score);p2-next=null;return(head);void print(struct student *head)/*这是输出链表函数*/struct student *p;printf(n这%d个学生的成绩记录为:n,n);p=head;if(head!=null)doprintf(%ld %5.1fn,p-num,p-score);p=p-next;while(p!=null);void numbermax(struct student
20、*head)/*这是找出学生最高分的函数*/ struct student *p1,*p2;p1=head;if(head=null) printf(列表为空n);else if(p1-next=null) printf(现在,这些学生最高分的是:n); printf(%5.1fn,p1-score);else printf(现在,这些学生最高分的是:n); p2=p1-next; do if(p2-scorep1-score) p1=p2; p2=p2-next; while(p2!=null); printf(%5.1fn,p1-score); void numbermin(struct
21、student *head)/*这是找出学生最低分的函数*/ struct student *p1,*p2;p1=head;if(head=null) printf(列表为空n);else if(p1-next=null) printf(现在,这些学生最低分的是:n); printf(%5.1fn,p1-score);else printf(现在,这些学生最低分的是:n); p2=p1-next; do if(p2-scorescore) p1=p2; p2=p2-next; while(p2!=null); printf(%5.1fn,p1-score); void numberavr(st
22、ruct student *head)/*这是找出学平均分的函数*/ struct student *p1;float sum=0,avr=0,n=0;p1=head;if(head=null) printf(列表为空n);else if(p1-next=null) printf(现在,这些学生的平均分是:n); printf(%5.1fn,p1-score);else printf(现在,这些学生的平均分是:n); while(p1!=null) sum=sum+p1-score; p1=p1-next; n=n+1; avr=sum/n; printf(%5.1fn,avr); void
23、scores(struct student *head)/*这是学生分数的排序函数*/struct student *p1,*p2;float i;long t;printf(这是学生分数从低到高的排序n);p1=head;if(head=null)printf(该列表为空表n);elsewhile(p1!=null)p2=p1-next; while(p2!=null) if(p1-scorep2-score) i=p2-score; p2-score=p1-score; p1-score=i; t=p2-num; p2-num=p1-num; p1-num=t; p2=p2-next; p
24、1=p1-next;while(head!=0) printf(%ld %5.1fn,head-num,head-score); head=head-next;struct student *del(struct student *head,long num)/*这是删除结点的函数*/struct student *p1,*p2;if(head=null)printf(n列表为空!n);goto end;p1=head;while(num!=p1-num&p1-next!=null)p2=p1;p1=p1-next;if(num=p1-num)if(p1=head)head=p1-next;e
25、lse p2-next=p1-next;printf(delete:%ldn,num);n=n-1;else printf(%ld 找不到这个学号!n,num); end:return(head);struct student *insert(struct student *head,struct student *stud)/*这是插入结点的函数*/struct student *p0,*p1,*p2;p1=head;p0=stud;if(head=null)head=p0;p0-next=null;elsewhile(p0-nump1-num)&(p1-next!=null)p2=p1;p
26、1=p1-next;if(p0-numnum)if(head=p1)head=p0;else p2-next=p0;p0-next=p1;elsep1-next=p0;p0-next=null;n=n+1;return(head);void main()/*这是主函数*/struct student *head,*stu;long del_num;printf(请输入学生的成绩记录:n);head=creat();print(head);numbermax(head);numbermin(head);numberavr(head); scores(head);printf(n请输入要删除的学生
27、数据的学号:);scanf(%ld,&del_num);while(del_num!=0)head=del(head,del_num);print(head);numbermax(head); numbermin(head); numberavr(head); scores(head);printf(请输入要删除的学生数据的学号:);scanf(%ld,&del_num);printf(n请输入要插入的学生数据:);stu=(struct student *)malloc(len);scanf(%ld,%f,&stu-num,&stu-score);while(stu-num!=0)head=
28、insert(head,stu);print(head);numbermax(head); numbermin(head); numberavr(head); scores(head);printf(请输入要插入的学生数据:);stu=(struct student *)malloc(len);scanf(%ld,%f,&stu-num,&stu-score);34学生成绩文件管理#include#define n 3struct studentchar num6;char name20;float score3;float avr;stun,temp;void save()/* 存入文件st
29、ud.dat,关闭文件*/file *fp;int i;if(fp=fopen(stud.dat,wb)=null)printf(不能打开文件n);return;for(i=0;in;i+)if(fwrite(&stui,sizeof(struct student),1,fp)!=1)printf(文件输出有误n);fclose(fp);void sort(void)file *fp1,*fp2;int i,j;if(fp1=fopen(stud.dat,rb)=null)printf(不能打开文件nn);return;if(fp2=fopen(studsort.dat,wb)=null)pr
30、intf(文件输出有误n);return;for(i=0;in;i+)if(fread(&stui,sizeof(struct student),1,fp1)!=1)printf(文件读入有误n);return;for(i=0;in;i+)for(j=i+1;jn;j+)if(stui.avrstuj.avr)temp=stui;stui=stuj;stuj=temp;fwrite(&stui,sizeof(struct student),1,fp2);fclose(fp1);fclose(fp2);void main()int i,j,maxi;float sum,max;file *fp1
31、,*fp2;/*输入学生的数据*/for(i=0;in;i+)printf(请输入学生的学号姓名和3个成绩 %d:n,i+1);printf(学号.:);scanf(%s,stui.num);printf(姓名:);scanf(%s,);for(j=0;j3;j+)printf(成绩%d:,j+1);scanf(%f,&stui.scorej);printf(n);/*输出单门成绩最高的学生*/max=0;maxi=0;for(j=0;j3;j+)max=0;for(i=0;imax)max=stui.scorej;maxi=i; printf(score %d 最高分的学生
32、是: %s,%s.n,j+1,stumaxi.num,);printf(score %d 的分数为 %6.2fn,j+1,stumaxi.scorej);/*输入三门课程的平均分最高的学生*/for(i=0;in;i+)sum=0;for(j=0;jmax)max=sum;maxi=i;printf(三门课程的平均分最高的学生: student %s,%s.n,stumaxi.num,);printf(该平均分是: %6.2fn,stumaxi.avr);save();fp1=fopen(stud.dat,rb);printf(%d个学生成绩:n
33、,n);printf(n 学号 姓名 成绩1 成绩2 成绩3n); for(i=0;in;i+)fread(&stui,sizeof(struct student),1,fp1);printf(n%-7s,%-3s,%6.2f,%6.2f,%6.2fn,stui.num,,stui.score0,stui.score1,stui.score2);fclose(fp1);/*学生按平均分数从高到低进行排序*/sort();fp2=fopen(studsort.dat,rb);printf(学生按平均分数从高到低排序: n);printf(n 学号 姓名 成绩1 成绩2 成绩3n
34、); for(i=0;in;i+)fread(&stui,sizeof(struct student),1,fp2);printf(n%-7s,%-3s,%6.2f,%6.2f,%6.2fn,stui.num,,stui.score0,stui.score1,stui.score2);fclose(fp2);/*奇数学生的各个值*/fp2=fopen(studsort.dat,rb);printf(奇数学生的成绩: n);printf(n 学号 姓名 成绩1 成绩2 成绩3n); for(j=1;j=(n+1)/2;j+)i=2*j-1;fread(&stui,sizeof(
35、struct student),1,fp2);printf(n%-7s,%-3s,%6.2f,%6.2f,%6.2fn,stui.num,,stui.score0,stui.score1,stui.score2);fclose(fp2);35图书信息管理系统(1)主函数void main()/*主函数*/struct library *head;int d,i,b;for(i=0;i3;i+)printf(nnnnnnnnnnn 请用户输入口令:);scanf(%d,&d);if(d!=111)printf(口令输入错误n);if(i=2)printf(“你已经输入3次错误口
36、令,系统自动关闭n”);exit(0);else break;system(cls); doswitch(b=menu() case 1: head=creat();save(head);break; case 2: out(head);break; case 3: check(head);save(head);break; case 4: scores(head);save(head);out(head);break; case 5: del(head);save(head);out(head);break; case 6: corret(head);save(head);out(head)
37、;break;case0: printf(“谢谢使用n”);exit(0); default: printf(“你所选择功能不存在请重新选择n”);while(b!=0); (2)菜单和初始化int menu()/*菜单*/ char *menu=nnnnnn =图书信息管理系统=nn, 1. 录入功能 ,2. 浏览功能 nn, 3. 查询功能 ,4. 排序功能 nn, 5. 删除功能 ,6. 修改功能 nn, 0. 退出系统nn, =n; int c,i;for(i=0;i9;i+) printf(%s,menui); do printf(n 请输入选项(06)并按回车键:);scanf(%
38、d,&c); while(c6);return(c); (3) (录入函数)int n;struct library *creat(void)/*建立链表*/struct library *head;struct library *p1,*p2;n=0;system(cls);printf( 这是录入功能请输入图书数据n);p1=p2=(struct library *)malloc(len);head=null;while(1) printf(登录号:); scanf(%ld,&p1-num); if(p1-num!=0) printf(书名:); scanf(%s,p1-bookname); printf(作者名:); scanf(%s,p1-author); printf(类型号:); scanf(%s,p1-type); printf(出版单位); scanf(%s,p1-publishing_house); printf(出版时间:); scanf(%s,p1-publishing_time); printf(价格:); scanf(%f,&p1-sale); printf(n); n=n+1; if(n=1)head=p1; else p2-next=p1; p2=p1; p1=(struct library *)mal
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 中国地板护理蜡项目创业计划书
- 双导师培养PBL教学法用于中医专业型研究生科研素质的培养
- 中国卷式夹板项目创业计划书
- 中国辛醇项目商业计划书
- 唐山市人民医院输血医学专业英语术语考核
- 通辽市人民医院神经介入材料选择与使用考核
- 2025第三人民医院无菌技术与隔离概念在内镜中的应用笔试
- 2025第三人民医院物理治疗设备操作考核
- 邯郸市中医院肝切除术后并发症防治能力考核
- 2025年中国葡萄糖酸钙项目商业计划书
- 保险基础知识培训
- 口腔药品急救知识培训课件
- 2025年宁夏中考英语试卷附答案
- 手机媒体概论(自考14237)复习题库(含真题、典型题)
- 《新概念英语》第三册课文详解及课后答案
- 磁路基础知识
- 2020版昆士兰临床指南“妊娠期和产褥期静脉血栓栓塞的预防”要点解读
- 寰枢椎后路内固定技术课件
- 超星尔雅学习通《研究生科研能力训练与培养》章节测试含答案
- 第2章_铁路线路
- 矩量法 Method of Moment
评论
0/150
提交评论