资源描述
课 程 设 计 报 告
课程名称 C语言课程设计
课题名称 力学实验设备管理系统
专 业 土木工程
班 级 0902
学 号 23
姓 名 伍建
指导教师 陈世清 扬子华 曹燚
2010年 12 月 27 日
湖南工程学院
课 程 设 计 任 务 书
课程名称 C语言课程设计
课 题 力学实验设备管理系统
专业班级 土木0902
学生姓名 伍建
学 号 200909070223
指导老师 陈世清 扬子华 曹燚
审 批
任务书下达日期 2010 年 12 月 27 日
任务完成日期 2011年 1 月 2日
一、设计内容与设计要求
1.设计内容:
通过该系统实现对力学实验设备信息进行录入、修改、统计、查询、保存等操作的管理。
实验设备信息包括:设备编号,设备种类,设备名称(如烧杯、酒精灯等),设备价格,设备购入日期,是否报废,报废日期等。
主要功能:
1)、能够完成对设备的录入和修改
2)、对设备进行分类统计
3)、设备的破损耗费和遗损处理
4)、设备的查询
5)、将设备信息保存到文件中
2.设计要求:
1)、设计正确,方案合理。
2)、界面友好,使用方便。
3)、程序精炼,结构清晰。
4)、设计报告5000字以上,。
5)、上机演示。
二、进度安排
第17周 星期一 布置任务,查找资料。
星期二 确定总体方案,进行详细设计。
星期三 编写程序,上机调试。
星期四 编写程序,上机调试。
星期五 答辩,总结。
星期六~星期天 写课程设计报告
附:
课程设计报告装订顺序:封面、任务书、目录、正文、附件、评分(A4大小的图纸及程序清单)。
正文的格式:一级标题用3号黑体,二级标题用四号宋体加粗,正文用小四号宋体;行距为22。
正文的内容:一、1、设计目的 2、总体设计(程序设计组成框图、流程图)3、详细设计(模块功能说明(如函数功能、入口及出口参数说明,函数调用关系描述等)4、调试与测试:调试方法,测试结果的分析与讨论,测试过程中遇到的主要问题及采取的解决措施 5、总结与体会:课程设计的心得与体会。附件:源程序清单,清单中应有足够的注释
正文总字数要求在5000字以上(不含程序原代码)。
目录
1、 总体设计
2、 详细设计
3、 调试与测试:
4、 总结与体会
附:源程序清单和执行结果
一、设计目的
1)了解和掌握c语言面向对象程序设计的基本过程
2)学会总体规划一个程序,从各个部分把一个程序完成好
3)能够使自己的程序实现一定的功能,对C++产生一种浓厚的兴趣
4)培养耐心,遇困难不退缩
5)了解团队精神的重要性,团结合作
6)进一步熟悉C语言的特点
二、总体设计
1、力学实验设备管理系统
信息录入
信息修改
信息删除
信息统计
信息查询
信息保存
2、流程
(1)开始进入系统
开始
添加记录
查找记录
显示记录
删除记录
修改记录
结束
Menu_select
退出保存
1 2 3 4 5 6
Break Break Break Break Break break
(2)菜单界面
基本信息录入
基本信息保存
基本信息查询
基本信息显示
基本信息删除
基本信息修改
(3)信息录入
1)按编号查询
2)按名称查询
3)按种类查询
(4)显示所有
(5)结束,保存信息
(6)退出系统
三、调试与测试
3.1调试
执行程序时,显示如下信息:
输入一组数据后,显示菜单:
选择不同的选项,执行相应的功能。选择1添加设备信息
选择2查找设备信息,可按三种方式查找
选择3,可显示信息
。
选择4,删除设备信息
选择5,修改设备信息。
选择0,保存并退出。
3、2测试及其解决问题
在测试过程中,关于购买日期和报废日期,输入正常,显示则成了乱码,经过仔细检查发现在定义变量的出现了问题,及时改正。
另外由于疏忽,没有将密码函数链接到主函数中,使得密码功能没有体现,及时调整。显示内容与表头进行调整对齐,由于显示函数和查找函数都有显示功能,需要同时调整。
四、详细设计
4.1函数以及调用关系
void userinterface() /*菜单函数*/
开始
添加记录
查找记录
显示记录
删除记录
修改记录
结束
Menu_select
退出保存
1 2 3 4 5 6
Break Break Break Break Break break
void showall(); /*显示函数*/
开始
调用save( )
head==NULL ====
==N
NNNNNNNNNULL
NULL
NULL
hhhhhead
hhhhhead==NULL
显示信息
真
假 真
退出
结束
void add() /*增加设备函
开始
输入编号
Record=0
假 真
输入数据( 名称、种类、价格、购买日期、报废日期、是否报废)
继续添加
结束
void delet() /*删除函数*/
开始
输入要删除学生学号
输入num
Num=!0
真 假
删除成功
Choices()
结 束
void find() /*查找函数*
开始
按名称查找
按种类查找
按编号查找
判断
显示要查找内容
没有找到
退 出
void findchoice()
真 假
void modify() /*修改信息函数*/
开始
输入编号
Record=0
假 真
输入数据( 新的名称、种类、价格、购买日期、报废日期、是否报废)
结束
void save(); /*把信息保存到磁盘*/
退 出
关闭文件
开始
打开文件
数据写入文件
void load(); /*读数据*/
开始
关闭文件
读出数据
打开文件
退 出
五、心得与体会
经过一个学期的C 语言学习,在老师的悉心帮助下,我懂得了许多关于程方面的知识,知道怎么运用一个程序,学会编写简单的程序。
实验室设备信息的浏览查询:分为对设备信息的浏览和对设备信息的准确查询。查询可以是不同字段的联合查询。该操作是所有用户都具有的操作权限。
设备事故记录:分为对设备事故的增加、设备事故的删除、设备事故的修改。作权限是管理员具有。设备资料管理模块:分为对设备施工单位、设备生产厂家、设备的相关信息。该操作权限是管理员具有设备的损坏管理:对设置的使用过程中遇到的设备损坏进行记录,并且修改相关联的数据信息。该操作对管理员开发,一般用户不具备。设备损坏信息浏览查询:实现对损坏设备信息的准确查询。查询可以是不同字段的联合查询。该操作是所有用户都具有的操作权限设备类别设置:实验室的仪器分门别类,包括类别名称,类别数量,最低数量的设置。该操作属于管理员权限。系统用户的管理:使用该系统的包括:管理员和实验课指导教师,管理员具有对实验课指导教师记录进行添加,修改,删除等操作权限。用传统程序设计语言设计程序时,都是通过编写程序代码来设计用户界面,在设计过程中看不到界面的实际显示效果,必须编译后运行程序才能观察。如果对界面的效果不满意,还要回到程序中修改。有时候,这种编程-编译-修改的操作可能要反复多次,大大影响了软件开发效率。Visual Basic提供了可视化设计工具,把Windows界面设计的复杂性“封装”起来,开发人员不必为界面设计而编写大量程序代码。只需要按设计要求的屏幕布局,用系统提供的工具,在屏幕上画出各种“部件”,即图形对象,并设置这些图形对象的属性。Visual Basic自动产生界面设计代码,程序设计人员只需要编写实现程序功能的那部分代码,从而可以大大提高程序设计的效率
虽然对C语言知识的学习还只是皮毛,但通过这一段时间的学习和认知,我以深深爱上了C语言,希望以后能继续学习,继续深入的研究,加深对这门课程的理解,把知识运用到我们的生活当中。
附件:源程序清单
#include <stdio.h>
#include <conio.h>
#include <string.h>
#include <stdlib.h>
#define SIZE 50
#define MAX 100
void Read( ); /* 读数据 */
void Save( ); /* 存数据 */
void Search( ); /* 查找 */
void SearchByID( ); /* 按编号查找 */
void SearchByEQUIP_Name( ); /* 按实验设备名称查找 */
void Delete( ); /* 删除 */
void Print( ); /* 显示 */
void Add( ); /* 录入 */
void Modify( ); /* 修改 */
void Count( ); /* 统计 */
struct cEQUIP /* 实验设备结构体 */
{
char ID[SIZE]; /* 编号 */
char EQUIP_Name[SIZE]; /* 实验设备名称 */
double Price; /* 设备价格 */
char Kind[SIZE]; /* 实验设备种类 */
char DP[SIZE]; /* 购买日期 */
char YN[SIZE]; /* 是否报废 */
char DR[SIZE]; /* 报废日期 */
}
EQUIP[MAX],temp;
int EQUIPIndex=0;
int EQUIPSum=0;
int EQUIPFlag[MAX];
void Add( ) /* 录入数据 */
{
printf("请输入编号:");
scanf("%s",temp.ID);
printf("请输入实验设备名称:");
scanf("%s",temp.EQUIP_Name);
printf("请输入 实验设备的设备价格:");
scanf("%lf",&temp.Price);
printf("请输入实验设备种类:");
scanf("%s",temp.Kind);
printf("请输入购买日期:");
scanf("%s",temp.DP);
printf("请输入是否报废:");
scanf("%s",temp.YN);
printf("请输入报废日期:");
scanf("%s",temp.DR);
EQUIP[EQUIPIndex]=temp;
EQUIPFlag[EQUIPIndex]=1;
EQUIPSum++;
EQUIPIndex++;
printf("录入成功!\n");
getch();
}
void Read( ) /* 读取数据 */
{
FILE *pfile= NULL;
char buf[SIZE];
if((pfile = fopen("EQUIP.txt", "r")) == NULL)
{
printf("读取信息失败!\n");
return;
}
while(fgets(buf, SIZE, pfile))
{
fscanf(pfile,"%s",EQUIP[EQUIPIndex].ID);
fscanf(pfile,"%s",EQUIP[EQUIPIndex].EQUIP_Name);
fscanf(pfile,"%lf\n",&EQUIP[EQUIPIndex].Price);
fscanf(pfile,"%s",EQUIP[EQUIPIndex].Kind);
fscanf(pfile,"%s",EQUIP[EQUIPIndex].DP);
fscanf(pfile,"%s",EQUIP[EQUIPIndex].YN);
fscanf(pfile,"%s",EQUIP[EQUIPIndex].DR);
EQUIPFlag[EQUIPIndex]=1;
EQUIPSum++;
EQUIPIndex++;
}
EQUIPSum--;
EQUIPIndex--;
fclose(pfile);
return;
}
void Save( ) /* 保存数据 */
{
int i=0;
FILE *pfile= NULL;
if((pfile = fopen("EQUIP.txt", "w+")) == NULL)
{
printf("保存信息失败!\n");
return;
}
for(i=0;i<EQUIPIndex;i++)
if(EQUIPFlag[i]>0)
{
fprintf(pfile,"\n");
fprintf(pfile,"%s\n",EQUIP[i].ID);
fprintf(pfile,"%s\n",EQUIP[i].EQUIP_Name);
fprintf(pfile,"%lf\n",EQUIP[i].Price);
fprintf(pfile,"%s\n",EQUIP[i].Kind);
fprintf(pfile,"%s\n",EQUIP[i].DP);
fprintf(pfile,"%s\n",EQUIP[i].YN);
fprintf(pfile,"%s\n",EQUIP[i].DR);
}
printf("保存成功!\n");
getch( );
fclose(pfile);
}
void Search( ) /* 查找 */
{
int choose=0;
while(1)
{
system("cls");
printf("\n\n\n");
printf(" 1: 按实验设备编号查询\n\n");
printf(" 2: 按实验设备名称查询\n\n");
printf(" 3: 返回\n\n");
printf("请选择:");
scanf("%d",&choose);
switch(choose)
{
case 1:SearchByID( );
break;
case 2:SearchByEQUIP_Name( );
break;
case 3:
return;
default:break;
}
}
return;
}
void SearchByID( ) /* 按编号查找 */
{
char id[SIZE];
int i=0;
printf("\n输入编号:");
scanf("%s",id);
for(i=0;i<EQUIPIndex;i++)
{
if(strcmp(EQUIP[i].ID,id)==0)
break;
}
if(i>=EQUIPIndex) printf("查找失败\n");
else if(EQUIPFlag[i]==0) printf("查找失败\n");
else
{
printf("\n查找成功:\n");
printf("\n编号:%s\t实验设备名称:%s\n",EQUIP[i].ID,EQUIP[i].EQUIP_Name);
printf("\t\t设备价格:%lf\t\t实验设备种类:%s\n",EQUIP[i].Price,EQUIP[i].Kind);
printf("\t\t购买日期:%s\t\t是否报废%s\t\t报废日期:%s\n",EQUIP[i].DP,EQUIP[i].YN,EQUIP[i].DR);
}
printf("\n");
getch( );
return;
}
void SearchByEQUIP_Name( ) /* 按实验设备名称查找 */
{
char EQUIP_Name[SIZE];
int i=0,j=0;
printf("\n请输入实验设备名称:");
scanf("%s",EQUIP_Name);
for(i=0;i<EQUIPIndex;i++)
{
if(strcmp(EQUIP[i].EQUIP_Name,EQUIP_Name)==0)
{
if(EQUIPFlag[i]!=0)
{
j=1;
printf("\n编号:%s\t实验设备名称:%s\n",EQUIP[i].ID,EQUIP[i].EQUIP_Name);
printf("\t\t设备价格:%lf\t\t实验设备种类:%s\n",EQUIP[i].Price,EQUIP[i].Kind);
printf("\t\t购买日期:%s\t\t是否报废%s\t\t报废日期:%s\n",EQUIP[i].DP,EQUIP[i].YN,EQUIP[i].DR);
}
}
}
if(j==0) printf("查找失败\n");
printf("\n");
getch( );
return;
}
void Modify( ) /* 修改 */
{
char id[SIZE];
int i=0;
printf("请输入编号:");
scanf("%s",id);
for(i=0;i<EQUIPIndex;i++)
{
if(strcmp(EQUIP[i].ID,id)==0)
break;
}
if(i>=EQUIPIndex) printf("查找失败\n");
else if(EQUIPFlag[i]==0) printf("查找失败\n");
else
{
printf("查找成功:\n");
printf("\n编号:%s\t实验设备名称:%s\n",EQUIP[i].ID,EQUIP[i].EQUIP_Name);
printf("\t\t设备价格:%lf\t\t实验设备种类:%s\n",EQUIP[i].Price,EQUIP[i].Kind);
printf("\t\t购买日期:%s\t\t是否报废%s\t\t报废日期:%s\n",EQUIP[i].DP,EQUIP[i].YN,EQUIP[i].DR);
printf("\n开始修改:\n");
printf("请输入编号:");
scanf("%s",temp.ID);
printf("请输入实验设备名称:");
scanf("%s",temp.EQUIP_Name);
printf("请输入设备价格:");
scanf("%lf",&temp.Price);
printf("请输入实验设备种类:");
scanf("%s",temp.Kind);
printf("请输入购买日期:");
scanf("%s",temp.DP);
printf("请输入是否报废:");
scanf("%s",temp.YN);
printf("请输入报废日期:");
scanf("%s",temp.DR);
EQUIP[i]=temp;
}
printf("\n");
return;
}
void Delete( ) /* 删除 */
{
char id[SIZE];
int i=0;
printf("请输入编号:");
scanf("%s",id);
for(i=0;i<EQUIPIndex;i++)
{
if(strcmp(EQUIP[i].ID,id)==0)
break;
}
if(i>=EQUIPIndex) printf("查找失败\n");
else if(EQUIPFlag[i]==0) printf("查找失败\n");
else
{
printf("\n查找成功:\n");
printf("\n编号:%s\t实验设备名称:%s\n",EQUIP[i].ID,EQUIP[i].EQUIP_Name);
printf("\t\t设备价格:%lf\t\t实验设备种类:%s\n",EQUIP[i].Price,EQUIP[i].Kind);
printf("\t\t购买日期:%s\t\t是否报废%s\t\t报废日期:%s\n",EQUIP[i].DP,EQUIP[i].YN,EQUIP[i].DR); EQUIPSum--;
EQUIPFlag[i]=0;
printf("\n");
printf("删除成功\n");
}
printf("\n");
getch( );
return;
}
void Print( ) /* 显示 */
{
int i=0;
if(EQUIPSum<=0)
{
printf("\n无力学实验设备信息!\n");
getch( );
return;
}
printf("\n数量:%d\n\n",EQUIPSum);
for(i=0;i<EQUIPIndex;i++)
if(EQUIPFlag[i]>0)
{
printf("\n编号:%s\t实验设备名称:%s\n\n",EQUIP[i].ID,EQUIP[i].EQUIP_Name);
printf("\t\t设备价格:%lf\t\t实验设备种类:%s\n\n",EQUIP[i].Price,EQUIP[i].Kind);
printf("\t\t购买日期:%s\t\t是否报废%s\t\t报废日期:%s\n\n",EQUIP[i].DP,EQUIP[i].YN,EQUIP[i].DR);
}
printf("\n");
getch( );
return;
}
void Count( ) /* 统计 */
{
double AllSum=0.0,avg=0.0;
int i;
for(i=0;i<EQUIPIndex;i++)
{
if(EQUIPFlag[i]!=1) continue;
AllSum+=EQUIP[i].Price;
}
avg=AllSum/EQUIPSum;
printf("实验设备价格平均值为:%lf\n",avg);
printf("以下实验设备设备价格超过此平均值:\n");
for(i=0;i<EQUIPIndex;i++)
{
if(EQUIPFlag[i]!=1) continue;
if(EQUIP[i].Price>=avg)
{
printf("\n编号:%s\t实验设备名称:%s\n",EQUIP[i].ID,EQUIP[i].EQUIP_Name);
printf("\t\t设备价格:%lf\t\t实验设备种类:%s\n",EQUIP[i].Price,EQUIP[i].Kind);
printf("\t\t购买日期:%s\t\t是否报废%s\t\t报废日期:%s\n",EQUIP[i].DP,EQUIP[i].YN,EQUIP[i].DR);
}
}
getch();
}
int main( ) /* 主函数 */
{
int choose=0,i;
for(i=0;i<MAX;i++)
EQUIPFlag[i]=0;
Read( );
while(1)
{
system("cls");
printf("\n\t************************************************************************");
printf("\n\t*************** 欢迎进入力学实验设备信息管理系统 ***************\n");
printf("\t********************* *********************\n");
printf("\t**************** 1: 力学实验设备信息录入 ****************\n");
printf("\t**************** 2: 力学实验设备信息浏览 ****************\n");
printf("\t**************** 3: 力学实验设备信息查询 ****************\n");
printf("\t**************** 4: 力学实验设备信息删除 ****************\n");
printf("\t**************** 5: 力学实验设备信息修改 ****************\n");
printf("\t**************** 6: 统计超过平均值的设备 ****************\n");
printf("\t**************** 7: 力学实验设备信息保存 ****************\n");
printf("\t**************** 8: 退出 ****************\n");
printf("\t**************** ****************\n");
printf("\t************************************************************************\n");
printf("请选择相应的操作<1-8>:");
scanf("%d",&choose);
switch(choose)
{
case 1:Add( ); /* 力学实验设备信息录入 */
break;
case 2:Print( ); /* 力学实验设备信息浏览 */
break;
case 3:Search( ); /* 力学实验设备信息查询 */
break;
case 4:Delete( ); /* 力学实验设备信息删除 */
break;
case 5:Modify( ); /* 力学实验设备信息修改 */
break;
case 6:Count( ); /* 统计超过平均值的设备 */
break;
case 7:Save( ); /* 力学实验设备信息保存 */
break;
case 8:
exit(0);
default:break;
}
}
return 0;
}
展开阅读全文