课 程 设 计 报 告
课程名称 C语言课程设计
课题名称 实验设设备管理系统
专 业 计算机科学与技术
班 级 191114班
学 号
姓 名
指导教师
20##年 08 月27日
中国地质大学
计算机高级语言(C)
课程设计报告
姓 名
学 号
班 级 191114
专 业 计算机科学与技术
指导教师
20##年1月15 日
目录
1、 系统程序需求分析
2、 系统程序总体设计与模块划分
3、 系统程序详细设计与程序调试
4、实习总结和心得体会
C语言程序设计报告--实验设备信息管理系统
一 课程设计的目的
提高程序设计能力,检验课堂教学内容,掌握程序设计的基本方法和调试技能。
二 课程设计报告正文
课程设计题目
实验设备信息包括:设备编号、设备种类(如:微机 打印机 扫描仪 等等)、设备名称、设备价格、设备购入日期、是否报废、报废日期等。试设计一实验设备信息管理系统,使之能提供以下功能:
(1)能够完成对设备的录入和修改
(2)对设备进行分类统计
(3)设备的查询
1 需求分析
实验室设备信息用文件存储,提供文件的输入输出操作;要能够完成设备的录入和修改,需要提供设备添加和修改操作;实现对设备进行分类统计,需要提供排序操作;实现对设备查询需要提供查找操作,设备的查询可根据设备编号 设备种类 设备购入日期 正常设备(未报废的)等多种方式查询;另外还要根据键盘式选择菜单以实现功能选择。
2总体设计与模块的划分
整个系统可设计为实验设备信息输入模块 实验设备信息添加模块 实验设备信息修改模块 实验设备分类统计模块和实验设备查询模块。
4 建立实验设备信息结构体,结构体成员包括设备编号 设备种类 设备名称 设备价格 设备购入日期 是否报废 报废日期。
3 详细设计
3.1流程图显示
3.2 程序源代码
A (1) 各种各样的头文件以及各样的函数定义
#include
#include
#include
#define N 50
void menu();
void add();
void modify(); //修改
void stat(); //统计
void search();
int load();
(2)主函数
主函数是整个程序的核心。它将其他函数包含在其中,是整个程序的“大脑”,它调用很多函数,为了是读者更加的清晰,明白,在主函数中又调用了其他的函数。
void menu()
{ int n;
puts("\t\t************************MENU*************************\n\n");
puts("\t\t\t\t 1.添加您所需实验设备的信息");
puts("\t\t\t\t 2.修改您所需实验设备的信息");
puts("\t\t\t\t 3.统计您所需实验设备的信息");
puts("\t\t\t\t 4.查询您所需实验设备的信息");
puts("\t\t\t\t 5.退出");
puts("\n\n\t\t****************************************************\n");
printf("清选择你所需服务的号码(1-5): [ ]\b\b");
scanf("%d",&n);
switch(n)
{
case 1:add();break;
case 2:modify();break;
case 3:stat();break;
case 4:search();break;
case 5:exit(0);
default:menu();
}
}
void main() /*主函数*/
{
menu();
getchar();
}
B 各功能模块设计
(1)添加实验设备信息模块
void add()
{
int i;
FILE *fp;
fp=fopen("eup.txt","a");
if((fp=fopen("eup.txt","a"))==NULL)
{
printf("cannot open file\n");
}
printf("\n 输入:编号 \t 种类 \t 名称 \t 价格 \t
购入日期 \t是否报废\t 报废日期\n");
scanf("%s",temp.id);
scanf("%s",temp.kind);
scanf("%s",temp.name);
scanf("%s",temp.price);
scanf("%s",temp.in_date);
scanf("%s",temp.reject);
scanf("%s",temp.out_date);
fprintf(fp,"\n %s \t %s \t
%s \t %s \t %s \t %s \t %s"
,temp.id,temp.kind,temp.name,
temp.price,temp.in_date,temp.reject,temp.out_date);
fclose(fp);
printf("\n\n\t Successful.^_^ \n\n");
printf("\n*********************************************************\n");
printf("What do you want to do?\n\n");
printf("\t 1.继续添加 \t 2.返回主菜单 \t 3.退出 \n");
printf("\n************************************************************\n");
printf("\n\n 输入你要选择的号码 (1-3):");
scanf("%d",&i);
if(i==1)
{
add();
}
if(i==2)
{
menu();
}
if(i==3)
{
exit(0);
}
}
(3)修改模块
先判断是否能找到要修改的信息,如果找不到用户要修改实验设备信息的编号,则提醒用户“对不起,没有你所需的文件信息!”,若能找到用户要修改的信息的编号,则依次输出要修改的项目提示进行逐项修改,完成各项修改后输出提示:“1.继续修改 \t 2.返回主菜单 \t 3.退出”
void modify()
{
FILE *fp;
int n,k=0,b,c,i,e;
char a[10];
n=load();
for(i=0;i
{
printf("%s \t %s \t %s \t %s \t %s \t %s \t %s \n",eup[i].id,
eup[i].kind,eup[i].name,eup[i].price,eup[i].in_date,eup[i].reject,eup[i].out_date);
}
printf("\n 输入你要修改的设备的编号! \n\n 实验设备的编号:");
scanf("%s",a);
for(i=0;i
{
k=1;
c=i;
break;
if(k==0)
{
printf("\n\n 对不起,没有你所需的文件信息!");
printf("\t1).文件内容在这里 2).返回 主菜单 []\b\b");
scanf("%d",&b);
if(b==1){modify();}
if(b==2){menu();}
}
if(k==1)
{
printf("\n 找到要修改的设备! \n");
printf("\n 请输入你要修改的新信息 :\n");
printf("\n 编号 种类 名称 价格 购入日期 是否报废 报废日期 \n");
scanf("%s",eup[c].id);
scanf("%s",eup[c].kind);
scanf("%s",eup[c].name);
scanf("%s",eup[c].price);
scanf("%s",eup[c].in_date);
scanf("%s",eup[c].reject);
scanf("%s",eup[c].out_date);
}
fp=fopen("eup.txt","w");
}统for(i=0;i
{
fprintf(fp,"%s \t %s \t %s \t %s \t %s \t %s \t %s \n",eup[i].id,
eup[i].kind,eup[i].name,eup[i].price,eup[i].in_date,eup[i].reject,eup[i].out_date);
}
fclose(fp);
printf("\n\n\t Successful.^_^ \n\n");
printf("\n********************************************************************\n");
printf(" 你还想做什么?\n\n");
printf("\t 1.继续修改 \t 2.返回主菜单 \t 3.退出 \n");
printf("\n*********************************************************************\n");
printf("\n\n 你的选择(1-3):");
scanf("%d",&e);
if(e==1)
{
modify();
}
if(e==2)
{
menu();
}
if(e==3)
{
exit(0);
}
}
(4)统计模块
void stat()
{
FILE *fp;
fp=fopen("eup.txt","r");
if((fp=fopen("eup.txt","r"))==NULL)
{
printf("cannot open file\n");
}
while(!feof(fp))
{
fscanf(fp,"\n%s %s %s %s %s %s %s",temp.id,temp.kind,temp.name,temp.price,temp.in_date,temp.reject,temp.out_date);
printf("\n%s\t%s\t%s\t%s\t%s\t%s\t%s",temp.id,temp.kind,temp.name,temp.price,temp.in_date,temp.reject,temp.out_date);
}
fclose(fp);
menu();
}
(5)查询模块
void search()
{
int i,n,k=-1,w1,w2,w3;
char c[10];
n=load();
printf("\n \n 按照具体条件进行查找: \n \n 1).实验设备的编号 2).种类 3).名称 4).购入日期 [ ]\b\b");
scanf("%d",&w3);
switch(w3)
{
case 1:
{
printf("\n\n 请输入要查找的设备的编号! 设备的编号:");
scanf("%s",c);
for(i=0;i
if(strcmp(c,eup[i].id)==0)
{
k=i;
printf("\n已经找到实验的设备!\n");
printf("\n该设备的实验信息:\n");
printf("\n 编号 种类 名称 价格 购入日期 是否报废 报废日期 \n \n");
printf("%s\t%s\t%s\t%s\t%s\t%s\t%s\n",eup[i].id,eup[i].kind,eup[i].name,eup[i].price,eup[i].in_date,eup[i].reject,eup[i].out_date);
}
if (k!=-1)
printf("\n\n Successful.^_^.");
if (k==-1)
printf(" 不能找到该设备的信息!\n");
printf("\n\t 1).重新查找 2).返回主菜单 [ ]\b\b");
scanf("%d",&w2);
if(w2==2) menu();
if(w2==1) search();
}break;
case 2:
{
printf("\n\n输入要查找的实验的设备的种类! 设备的种类:");
scanf("%s",c);
for(i=0;i
if(strcmp(c,eup[i].kind)==0)
{
k=i;
printf("\n 能找到该设备哦! \n");
printf("\n该设备的信息:\n");
printf("\n编号 种类 名称 价格 购入日期 是否报废 报废日期 \n\n");
printf("%s\t%s\t%s\t%s\t%s\t%s\t%s\n",eup[i].id,eup[i].kind,eup[i].name,eup[i].price,eup[i].in_date,eup[i].reject,eup[i].out_date);
}
if (k!=-1)
printf("\n\n Successful.^_^.");
if (k==-1)
printf("不能找到该设备!\n");
printf("\n\t1).重新查找 2).返回主菜单 [ ]\b\b");
scanf("%d",&w2);
if(w2==2) menu();
if(w2==1) search();
}break;
case 3:
{
printf("\n\n输入要查找的设备的名称! 名称:");
scanf("%s",c);
for(i=0;i
if(strcmp(c,eup[i].name)==0)
{
k=i;
printf("\n已经找到该设备!\n");
printf("\n设备的信息:\n");
printf("\n编号 种类 名称 价格 购入日期 是否报废 报废日期\n\n");
printf("%s\t%s\t%s\t%s\t%s\t%s\t%s\n",eup[i].id,eup[i].kind,eup[i].name,eup[i].price,eup[i].in_date,eup[i].reject,eup[i].out_date);
}
if (k!=-1)
printf("\n\n Successful.^_^.");
if (k==-1)
printf("不能找到该设备的信息");
printf("\n\t1).再次查找 2).返回主菜单 [ ]\b\b");
scanf("%d",&w2);
if(w2==2) menu();
if(w2==1) search();
}break;
case 4:
{
printf("\n\n输入要查找的实验设备的购入的日期! 购入的日期:");
scanf("%s",c);
for(i=0;i
if(strcmp(c,eup[i].in_date)==0)
{
k=i;
printf("\n已经能够找到该设备!\n");
printf("\n该设备的信息:\n");
printf("\n编号 种类 名称 价格 购入日期 是否报废 报废日期\n\n");
printf("%s\t%s\t%s\t%s\t%s\t%s\t%s\n",eup[i].id,eup[i].kind,eup[i].name,eup[i].price,eup[i].in_date,eup[i].reject,eup[i].out_date);
}
if (k!=-1)
printf("\n\nSuccessful.^_^.");
if (k==-1)
printf("不能找到该设备!\n");
printf("\n\t1).再次查找 2).返回主菜单 [ ]\b\b");
scanf("%d",&w2);
if(w2==2) menu();
if(w2==1) search();
}
}
}
5、总结与体会
这一次课程设计着实考研了我们对C语言知识的掌握情况。真可谓是让我无从下手,焦头烂额啊。因为我们在大一刚学完C语言这一门课程,就要让我们进行系统的C语言编程训练,让我们设计一个无懈可击的程序,这简直比登天还难。刚开始感觉确实有点力不从心,但是经过开始的学习、摸索,我的程序也终于初具雏形了。虽然在许多的功能方面有所欠缺,但是我觉得我是在进步的。经过的慢慢上机实践学习,给我的不只是疲惫更多的是收获。
课程设计是培养学生综合运用所学知识,发现,提出,分析和解决实际问题,锻炼实践能力的重要环节,是对学生实际工作能力的具体训练和考察过程.随着科学技术发展的日新月异,当今计算机应用在生活中可以说得是无处不在。因此作为二十一世纪的大学生来说掌握计算机开发技术是十分重要的。
在本次实践中,给我印象最为深刻的是在文件查询程序的编译过程中,先有我的各个子程序都已经编辑成功,那么这最后的程序就将是我成功的关键。老天不会让我太过顺利,他在这最后的时刻设置的障碍,是要考验我的能力,他要置我于死地?在这个问题的解决上,我打了退堂鼓,我不能忍受长时间的无功而反,时间正在消磨我的意志。没有了柳暗花明的一天,那么我怎么能说经受住了考验?然而,人的精神是不会败倒的。我鼓起勇气,到处问,到处查资料,黄天不负有心人,我的程序设计终于得以问世。
课程设计到此算是基本结束,在程序设计中暴露出的我自身的问题却是非常明显!!
首先,基础掌握不牢固。许多基本语法尚没有熟练掌握,在设计过程中仍需请教其它同学,更重要研究课本,设计效率底。
其次,经典算法掌握不牢。在编写程序的时候常常会停下来求助于书本,查看各种算法。
再次,程序量过大的时候,头绪理不清。杂乱无章,无系统性,不便调试和阅览,自己也易于出错。比如说少加分号,大括号,忘了先定义后使用的原则。
回顾这几天,我感慨颇多,的确,自从拿到题目到完成整个编程,从理论到实践,可以学到很多很多的东西,同时不仅可以巩固了以前所学过的知识,而且学到了很多在书本上所没有学到过的知识。通过这次课程设计使我们懂得了理论与实际相结合是很重要的,只有理论知识是远远不够的,只有把所学的理论知识与实践相结合起来,从理论中得出结论,才能真正为社会服务,从而提高自己的实际动手能力和独立思考的能力。在设计的过程中遇到问题,可以说得是困难重重,这毕竟第一次做的,难免会遇到过各种各样的问题,同时在设计的过程中发现了自己的不足之处,对一些前面学过的知识理解得不够深刻,掌握得不够牢固,比如说结构体,指针,函数,算法……通过这次课程设计之后,我们把前面所学过的知识又重新温故了一遍
这次课程设计终于顺利完成了,在设计中遇到了很多编程问题,最后在陈老师的辛勤指导下,终于游逆而解。同时,在刘老师的身上我学得到很多实用的知识,在次我表示感谢!同时,对给过我帮助的所有同学和指导老师再次表示忠心的感谢!