C语言程序设计课程设计报告内容_第1页
C语言程序设计课程设计报告内容_第2页
C语言程序设计课程设计报告内容_第3页
C语言程序设计课程设计报告内容_第4页
C语言程序设计课程设计报告内容_第5页
已阅读5页,还剩18页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、惠 州 学 院电 子 科 学 系C程序设计课程设计 姓名: 学号: 班级: 二0一0年十二月目 录1 引言22 设计与实现32.1 设计内容及选题依据32.2 设计方法32.3 设计过程32.3.1 需求32.3.2 功能设计32.3.3 功能细化42.3.4 功能实现92.4 结果分析172.4.1 功能模块测试172.4.2 测试结果分析203 结论214 参考文献221 引言为了巩固并深化本学期所学c语言程序设计知识,同时对软件开发过程有一个感性的认识,为以后的软件开发工作打下良好的基础,我们设计并实现了一个小型的成绩管理文件检索系统。该系统具有将输入的数据(学生的学号、姓名和成绩)以文

2、件形式保存、根据学号查询成绩及根据姓名查询成绩、显示指定文件中的数据以及对指定文件的数据进行统计分析的功能,并为用户提供了简单的人机界面。具体的设计实现基于结构化程序设计的思想,应用了高级语言程序设计中的基本控制结构、函数等内容,同时包含了软件开发过程的基本理论。该文件检索系统的开发语言是C语言,开发工具是TURBOC 2.0。本文主要工作是首先对成绩管理文件检索系统进行需求分析;其次阐述了结构化程序设计的基本思想;然后在需求分析的基础上,详细描述了整体设计过程,包括功能模块的设计以及相应的实现;最后对测试结果进行分析并得出结论。 2 设计与实现2.1 设计内容及选题依据本项目的主要内容是设计

3、并实现一个文件检索系统。文件检索作为一种一般的数据检索方式,有着很高的实用价值。设计并实现文件检索系统可以将c语言中的大部分知识进行融会贯通。该文件检索系统具有将输入的数据(学生的学号、姓名和成绩)以文件形式保存、根据学号或者姓名查询成绩、显示指定文件中的数据以及对指定文件的数据进行统计分析的功能,并为用户提供简单易操作的人机界面。2.2 设计方法采用结构化的程序设计方法:自顶向下、逐步细化、模块化设计、结构化编码。模块划分符合以下三条基本要求:1、 模块在功能上尽可能地单一化、明确化,即模块地凝聚性。2、 模块之间的联系及互相影响尽可能地少,尽量避免逻辑耦合,而仅限于数据耦合。3、 模块的规

4、模应当足够小,易于调试。结构化编码:顺序结构、选择结构、循环结构。结构化程序设计方法保证了软件的可靠准确度及易于修改,但是增大了程序工作量,降低了程序的运行效率。2.3 设计过程2.3.1 需求l 为用户提供进行功能选择的界面。功能选择包括输入数据(学生的学号、姓名和成绩)并存入文件、根据学号查询成绩、根据姓名(英文)查询成绩、显示文件中的所有数据及结束程序运行。l 根据用户的选择,进入相应的操作界面。l 根据界面的提示,输入相应的数据。l 为用户返回正确的运行结果。l 要求界面友好。2.3.2 功能设计2.3.2.1 模块划分l 模块1:功能选择模块;模块说明:选择创建新文件、按学号查询、按

5、姓名查询或退出;l 模块2:创建新文件模块;模块说明:将输入的数据(学号、姓名、成绩等)保存到文件中;l 模块3:按学号查询成绩模块;模块说明:根据输入的学号到指定文件中进行成绩查询;l 模块4:按姓名查询成绩模块;模块说明:根据输入的姓名到指定文件中进行成绩查询;l 模块5:显示文件中的所有数据;模块说明:显示指定文件中的所有数据;l 模块6:对成绩进行统计分析;模块说明:统计及格人数、及格率,优秀人数、优秀率;(可选模块)2.3.2.2系统结构文件检索系统功能选择模块数据保存模块按学号查询成绩按姓名查询成绩文件内容输出模块统计分析模块2.3.2.3系统整体流程开始功能选择数据保存按学号查询

6、成绩按姓名查询成绩文件内容输出 数据统计分析退出结束2.3.3 功能细化将以上的各功能模块细化,并画出流程图:2.3.3.1功能选择模块l 说明: l 流程图:2.3.3.2数据保存模块l 说明:首先,创建一个新文件;其次,输入各项记录内容(包含学号、姓名和成绩,当输入的学号为0时停止输入)并写到文件中;最后,显示文件内容。开始l 流程图:输入文件名创建并打开文件YN文件打开否?输入学号N学号0?YY学号重复?0?N输入姓名、成绩写文件关闭文件YN文件打开否?结束打开上述文件输出文件内容读文件Y2.3.3.3 按学号查询成绩模块l 说明:在指定的文件中,根据用户输入的学号查询该生的成绩,并返回

7、相应的信息。开始输入文件名文件名打开文件(只读)YN文件打开否?输入待查学号文件结束否?读出学号.姓名.成绩l 流程图:NY继续查询否?YN学号是否相同?输出学号、姓名、成绩设置找到标记如果没有找到处理结束关闭文件Y2.3.3.4按姓名查询成绩模块l 说明: 在指定的文件中,根据用户输入的姓名查询该生的成绩,并返回相应的信息。l 流程图:与前一模块相似,略。2.3.3.5 文件内容输出模块l 说明: 分页显示指定文件的内容,显示时可由用户控制是继续显示下一页还是结束。开始l 流程图:输入文件名文件名打开文件(只读)文件打开否? N Y本页已显示记录数置0显示错误信息(只读)读取并显示记录内容本

8、页已显示的记录数增加1,移向文件的下一条记录文件结束否? Y满一页否?N N显示下页? YYN 关闭文件结束2.3.3.6统计模块l 说明:统计指定文件中学生的及格人数、优秀人数及所占的百分率。 l 流程图:开始输入文件名文件名打开文件(只读)文件打开否? N 及格人数等变量初始化 Y读取当前记录显示错误信息(只读)成绩=60?及格人数加1 N Y成绩=90?优秀人数加1 N Y总人数加1,移向文件的下一条记录文件结束否? N Y关闭文件计算及格率、优秀率输出结果文件名结束2.3.4 功能实现各个功能模块的实现(以程序代码形式表示)。2.3.4.1 功能选择模块的实现#include #inc

9、lude struct StuType char No10; char Xm10; float Cj_En; float Cj_Mat; float Cj_Cir; float Cj_C; float Cj_Lin; ;typedef struct StuType StuType;char *DataFile=D:.XLS ;int Jy_No(char *Stu_NO,FILE *FP);int Jy_Cj(float Stu_Cj);int Jy_Xm(char *Stu_Xm);void Data_Dispn(char *DataFileName,int n);void Data_Dis

10、p(char *DataFileName);void Data_Stu(StuType Stu);/* 主函数*/main() int choice; FILE *fp; do clrscr(); fp=fopen(DataFile,ab+); /*按追加可读写方式打开文件*/ if(!fp) printf(数据文件不能打开,操作失败!n); return; printf( *n); printf( * * 请选择系统功能! * *n);/*请选择系统功能!*/ printf( * 1 输入数据! -* *n);/* 1 输入数据! */ printf( * 2 显示数据! -* *n);/*

11、 2 显示数据! */ printf( * 3 按姓名查找数据! -* *n);/* 3 按姓名查找数据! */ printf( * 4 按学号查找数据! -* *n);/* 4 按学号查找数据! */ printf( * 5 统计数据! -* *n);/* 5 统计数据! */ printf( * 6 退出系统! -* *n);/* 6 退出系统! */ printf( *n); scanf(%d,&choice); switch(choice) case 1: CreatFile();break; case 2: Data_Disp(DataFile);break; case 3: Dat

12、a_XmCx(DataFile);break; case 4: Data_NoCx(DataFile);break; case 5: Data_TjCx(DataFile);break; case 6: exit(); getch(); while(1);2.3.4.2 数据保存模块的实现/*=*/* 函数CreatFile() */* 功能是输入学生成绩数据 */* 并将这些数据存入指定的文件 */*=*/* 学号正确性校验,不准重复,字符串长度为No_Len*/int Jy_No(char *Stu_No,FILE *FP) const int No_Len=9; StuType Stu;

13、 if(!strcmp(Stu_No,#) return 1; if(strlen(Stu_No)!=No_Len) printf(学号的编码长度应该是%d!n,No_Len); return 0; else rewind(FP); while(!feof(FP) fread(&Stu,sizeof(struct StuType),1,FP); if(!strcmp(Stu_No,Stu.No) printf(学号编码重复!该生的成绩如下:n); Data_Stu(Stu); return 0; return 1; /*成绩正确性校验,必须是0-100之间的符点数*/int Jy_Cj(flo

14、at Stu_Cj) if(Stu_Cj100) printf(成绩必须在0-100之间!n); return 0; return 1;/*显示数据文件后N个同学的成绩的内容,参数DataFile为数据文件名*/void Data_Dispn(char *DataFileName,int n) StuType Stu; int RecAll=1; FILE *fp=fopen(DataFileName,rb);/*打开相应文件*/ if(n0) fseek(fp,-n*sizeof(struct StuType),SEEK_END);/*将文件指针定位*/ printf(nn *n); pri

15、ntf( 序号 学号 姓名 英语 数学 电路 C语言 线性 n); printf( =n); do fread(&Stu,sizeof(struct StuType),1,fp); /*读一条记录内容*/ printf(%3d %12s %11s %6.1f %10.1f %8.1f %12.1f %9.1fn,RecAll,&Stu.No,&Stu.Xm,Stu.Cj_En,Stu.Cj_Mat,Stu.Cj_Cir,Stu.Cj_C,Stu.Cj_Lin); RecAll+; while(feof(fp)=0); printf( =n); fclose(fp);/* 产生数据文件与增加数据

16、记录*/ void CreatFile() FILE *fp; int REC=0; /*追加的记录数*/ StuType Stu,Stu0=,0; fp=fopen(DataFile,ab+); /*按追加可读写方式打开文件*/ if(!fp) printf(数据文件不能打开,操作失败!n); return; while(1) /*输入记录*/ Stu=Stu0; do printf(n学号=); scanf(%s,&Stu.No); /*输入学号,并检查*/ while(!Jy_No(Stu.No,fp); if(!strcmp(Stu.No,#) break; /*输入记录以#结束*/

17、do printf(n姓名=); /*输入姓名,并检查*/ scanf(%s,&Stu.Xm); while(!(Stu.Xm); do printf(n英语成绩=); /*输入英语成绩,并检查*/ scanf(%f,&Stu.Cj_En); while(!(Stu.Cj_En); do printf(n数学成绩=); /*输入数学成绩,并检查*/ scanf(%f,&Stu.Cj_Mat); while(!Jy_Cj(Stu.Cj_Mat); do printf(n电路成绩=); /*输入电路成绩,并检查*/ scanf(%f,&Stu.Cj_Cir); while(!Jy_Cj(Stu.C

18、j_Cir); do printf(nC语言成绩=); /*输入C语言成绩,并检查*/ scanf(%f,&Stu.Cj_C); while(!Jy_Cj(Stu.Cj_C); do printf(n线性代数成绩=); /*输入线性代数成绩,并检查*/ scanf(%f,&Stu.Cj_Lin); while(!Jy_Cj(Stu.Cj_Lin); fwrite(&Stu,sizeof(struct StuType),1,fp); /* 将刚输入的记录写入文件*/ REC+; fclose(fp);/*关闭文件*/printf(n 所追加的数据清单如下: n); Data_Dispn(Data

19、File,REC); /* 显示所追加的数据清单。*/*=在屏幕上回显文件中的数据内容=*/clrscr();printf(您所输入的数据已经成功地写入 %s 文件中。n,DataFile);printf(其内容如下:n);fp=fopen(DataFile,r);if (fp = NULL)printf(n打开文件%s失败!按任意键结束。n,DataFile);perror(打开文件时出错);getch();exit(1);printf(n学号tt姓名t英语成绩n);while( feof(fp)=0)fscanf(fp,%9ldt%st%fn,&Number,Name,&EnglishGr

20、ade);printf(n%9ldt%st%7.2fn,Number,Name,EnglishGrade);fclose(fp); printf(n 所追加的数据清单如下: n); Data_Dispn(DataFile,-REC); /* 显示所追加的数据清单。*/2.3.4.3 按学号查询成绩模块的实现/* 显示学生的数据*/void Data_Stu(StuType Stu) printf( %10s %6s %9.1f %11.1f %9.1f %11.1f %12.1f n,&Stu.No,&Stu.Xm,Stu.Cj_En,Stu.Cj_Mat,Stu.Cj_Cir,Stu.Cj_

21、C,Stu.Cj_Lin);/* 数据查询(按学号)*/void Data_NoCx(char *DataFileName) StuType Stu,Stu_Cx; int x=0; FILE *fp=fopen(DataFileName,rb); printf(n请输入学号: ); scanf(%s,&Stu_Cx.No); while(!feof(fp) fread(&Stu,sizeof(struct StuType),1,fp); if(strcmp(Stu.No,Stu_Cx.No)=0) printf(nn - nn); printf( 学号 姓名 英语 数学 电路 C语言 线性

22、n); printf( * n); Data_Stu(Stu); printf(n - nn); x+; fclose(fp); return; fclose(fp); printf(n学号为%s的学生没有找到!!,Stu_Cx.No);2.3.4.4 按姓名查询成绩模块的实现/* 显示学生的数据*/void Data_Stu(StuType Stu) printf( %10s %6s %9.1f %11.1f %9.1f %11.1f %12.1f n,&Stu.No,&Stu.Xm,Stu.Cj_En,Stu.Cj_Mat,Stu.Cj_Cir,Stu.Cj_C,Stu.Cj_Lin);/

23、* 数据查询(按姓名)*/void Data_XmCx(char *DataFileName) StuType Stu,Stu_Cx; int x=0; FILE *fp=fopen(DataFileName,rb); printf(n请输入学生的姓名: ); scanf(%s,&Stu_Cx.Xm); do fread(&Stu,sizeof(struct StuType),1,fp); if(strcmp(Stu.Xm,Stu_Cx.Xm)=0) x+; if (x=1) printf(nn - nn); printf( 学号 姓名 英语 数学 电路 C语言 线性 n); printf(

24、* n); Data_Stu(Stu); while(!feof(fp); fclose(fp); switch (x) case 0: printf(n姓名为%s的学生没有找到!n,Stu_Cx.Xm); case 1: printf(n - nn); 2.3.4.5 文件内容输出模块的实现/*显示数据文件所有同学的成绩的内容,参数DataFile为数据文件名*/void Data_Disp(char *DataFileName) StuType Stu; int RecAll=1; FILE *fp=fopen(DataFileName,rb);/*打开相应文件*/ printf(nn *

25、n); printf( 序号 学号 姓名 英语 数学 电路 C语言 线性 n); printf( =n); while(feof(fp)=0) fread(&Stu,sizeof(struct StuType),1,fp); /*读一条记录内容*/ printf(%3d %13s %6s %10.1f %10.1f %11.1f %10.1f %9.1fn,RecAll,&Stu.No,&Stu.Xm,Stu.Cj_En,Stu.Cj_Mat,Stu.Cj_Cir,Stu.Cj_C,Stu.Cj_Lin); RecAll+; printf( =n); fclose(fp);2.3.4.6 统计

26、分析模块的实现/*数据统计 不及格 及格 良好 优秀*/void Data_TjCx(char *DataFileName) StuType Stu; float Rate5; int Tj5=0,0,0,0,0; FILE *fp=fopen(DataFileName,rb); int choose; float *Cj_Cx; printf( *n); printf( * * 请输入你想要查询的学科! * *n);/*请输入你想要查询的科目!*/ printf( * 1 英语 -* *n);/* 1 英语! */ printf( * 2 数学 -* *n);/* 2 数学! */ prin

27、tf( * 3 电路 -* *n);/* 3 电路! */ printf( * 4 C语言 -* *n);/* 4 C语言! */ printf( * 5 线性 -* *n);/* 5 线性代数! */ printf( *n); scanf(%d,&choose); switch(choose) case 5: Cj_Cx=&Stu.Cj_Lin;break; case 2: Cj_Cx=&Stu.Cj_Mat;break; case 3: Cj_Cx=&Stu.Cj_Cir;break; case 4: Cj_Cx=&Stu.Cj_C;break; case 1: Cj_Cx=&Stu.Cj

28、_En;break; while(!feof(fp) fread(&Stu,sizeof(struct StuType),1,fp); switch(int)*Cj_Cx/10) case 10: ; case 9: Tj0+; break; case 8: ; case 7: Tj1+; break; case 6: Tj2+; break; default: Tj3+; break; Tj4=Tj0+Tj1+Tj2+Tj3; Rate0=(float)(Tj0)/Tj4*100; Rate1=(float)(Tj1)/Tj4*100; Rate2=(float)(Tj2)/Tj4*100;

29、 Rate3=(float)(Tj3)/Tj4*100; Rate4=Rate0+Rate1+Rate2+Rate3; printf(n 优秀 良好 及格 不及格 合计 n); printf( *=*n); printf( 人 数 %7d %13d %13d %12d %14dn,Tj0,Tj1,Tj2,Tj3,Tj4); printf( -n); printf( 百分比 %8.0f %13.0f %13.0f %12.0f %15.0fn,Rate0,Rate1,Rate2,Rate3,Rate4); printf( *=*n); fclose(fp);2.4 结果分析对各功能模块分别进行测

30、试,并对测试结果进行分析。2.4.1 功能模块测试2.4.1.1 选择功能模块的测试l 输入说明l 预计的输出l 测试结果记录2.4.1.2 数据保存模块的测试输入说明输入学号:;输入姓名:liuzimian; 英语:98; 数学:98:; 电路:98; C语言:98; 线性:98l 预计的输出所追加的数据清单如下:序号 学号 姓名 英语 数学 电路 C语言 线性 1 liuzimian 98.0 98:.0 98.0 98.0 98.0l 测试结果记录序号 学号 姓名 英语 数学 电路 C语言 线性1 测试结果与预计的相同。2.4.1.3 按学号查询成绩模块的测试l 输入说明输入学号:l 预计的输出 学号 姓名 英语 数学 电路 C语言 线性 liuzilian 68.0 68:.0 68.0 68.0 68.0l 测试结果记录 学号 姓名 英语 数学 电路 C语言 线性测试结果与预计的相同。2.4.1.4 按姓名查询成绩模块的测试l 输入说明输入:liuzilianl 预计的输出 学号 姓名 英语 数学 电路 C语言 线性 liuzilian

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论