汽车零部件质检管理程序.docx
《汽车零部件质检管理程序.docx》由会员分享,可在线阅读,更多相关《汽车零部件质检管理程序.docx(27页珍藏版)》请在冰豆网上搜索。
汽车零部件质检管理程序
1、课程设计题目与要求....................................1
2、系统设计..............................................2
3、程序测试与运行结果....................................8
4、课程设计总结.........................................14
5、程序源代码...........................................15
1、课程设计与题目
1、题目描述:
已知在汽车零部件生产过程中,需要对生产的零部件进行质量检测,保证生产质量,以便对出现生产质量问题的责任人进行考核,设计一个汽车零部件质检管理程序,该程序应该具有完成如下功能:
(1)能从键盘输入质检信息。
(2)指定质检编号,显示质检信息。
(3)指定生产者,显示质检信息。
(4)指定质检编号,修改质检信息。
(5)指定质检编号,删除质检信息。
2、题目要求:
(1)按照分析、设计、编码、调试、测试的软件过程完成这个应用程序。
(2)质检信息包括:
质检编号、零部件名称、生产者、生产部门、质检结果(合格/不合格)、质量问题(设计缺陷/装配质量/加工质量)、质检员、质检日期。
(3)为各项操作功能设计一个菜单,应用程序运行后,先显示这个菜单,然后用户通过菜单项选择希望进行的操作项目。
3、输入要求:
(1)应用程序运行后在屏幕上显示一个菜单。
用户可以根据需求,选定相应的操作项目。
进入每个操作后,根据应用程序的提示信息,从键盘输入相应的信息。
程序根据用户输入的信息完成相应的处理,实现要求的功能。
(2)能对输入的数据进行简单的校验,例如,质检日期必须是一个合法的日期格式,质检编号是唯一的(一个质检编号对应一次质检的质检信息)。
4、输出要求:
(1)应用程序运行后,要在屏幕上显示一个菜单。
(2)要求用户输入数据时,给出清晰、明确的提示信息,包括输入的数据内容、格式以及结束方式等。
(3)在程序完成处理后,要清楚地给出程序的处理结果。
例如,在给定质检编号删除质检信息时,如果该质检信息不存在,要提示没能删除,如果删除成功要提示删除成功。
5、实现要求
(1)在程序中使用链表存储质检信息。
(2)采用模块化程序设计的方法,将程序中的各项功能用函数实现。
2、系统设计
1、分析题目
根据题目要求,质检信息可以从文本文件中存取,所以本程序应该提供读写文件,显示、查询、修改记录,保存文件等操作,此外,还应该提供键盘式选择菜单实现功能。
2、总体设计
根据需求分析,可以把这个系统的设计分为添加、修改、查询、显示、删除五大模块,其中查询模块可以分为两个子模块,子模块下面还有子函数;系统功能模块图如下所示:
3、模块设计
(1)数据结构设计
根据系统要求,系统中需要保存的数据信息,其结构如下:
数据项名称
数据项系统表示
数据类型
数据长度
质检编号
qid
字符串
15
零件名称
qname
字符串
15
生产者
producer
字符串
15
生产部门
pd
字符串
15
质检结果
qresult
字符串
15
质检问题
qproblem
字符串
15
质检员
qpersons
字符串
15
质检日期
time
字符串
12
(2)、结构体定义如下:
structinformation
{
charqid[15];
charqname[15];
charproducer[15];
charpd[15];
charqresult[15];
charqproblem[15];
charqpersons[15];
chartime[12];
structinformation*next;
};
(3)、函数声明
voidcreateRec();/*新建质检信息*/
voidloadRec();/*从磁盘文件导入质检信息到内存*/
voidsearchRecqid();/*查询质检信息(根据质检编号)*/
voidsearchRecpro();/*查询质检信息(根据生产者)*/
voidmodifyRec();/*修改质检信息*/
voiddeleteRec();/*删除质检信息*/
voidlistRec();/*显示所有质检信息*/
voidwriteInfo();/*保存质检信息*/
voidexit0();/*退出*/
intmenu_select();*主菜单*/
intfqid(chara[]);//判断质检编号是否已被输入//
intcheck(chardate[])//判断日期是否合法//
(4)、定义两个全局变量:
/*链表操作所用结构体指针*/
structstudent*head=NULL,*p1,*p2,*p3,p0;/*定义结构体指针head为头指针p1为输入数据缓存空间指针p2为尾指针p0为调用链表循环时所用指针*/
/*学生记录保存标志全局变量*/
Intwriteinfo_flag=0;
(5)主函数流程图
(6)添加质检信息函数流程图
查询函数设计(根据质检编号)
查询函数设计(根据生产者)
(6)
修改质检信息函数设计
(7)
删除质检信息函数设计
三、程序测试与运行结果
1、主菜单界面
若输入的数字不是0~7,则会提示输入错误
2、添加信息界面
若输入的质检编号已经存在。
会提示编号以存在,重新输入。
若输入的时间结构不正确,会提示输入不合法,请重新输入。
3、修改界面
4、查询信息界面(学号查询)
若输入的质检编号是不存在的质检编号,在提示找不到该质检编号。
(2)、按生产者查询
6、删除信息界面
若要删除的质检信息不存在,则提示找不到信息。
7、显示全部信息界面
8、保存信息界面
四、课程设计总结
本次C语言课程设计非常有意义,它锻炼了我们解决实际问题的能力。
由于本人对编程感兴趣,在编程方面有一定基础,因此尝试着由自己完成整个系统,在设计的过程里也遇到了很多麻烦,但是通过查询参考书和网络,一个个疑难迎刃而解。
通过这次实践课,不只是强化了我们C语言编程的能力,更重要的是使我们学会了一种工作方法,学会了如何规划、组织、设计、实施项目,从整体到局部,从局部又到整体。
在编程过程中,我尝试将质检结果和质检问题一起输入,但是总是出现错误,没有办法显示正确的结果,最后实在没办法,只能放弃,采取分开输入的方法。
五、源代码
/*所使用的有头文件*/
#include
#include
#include
#include
#include
#defineLENsizeof(structinformation)
/*结构体定义*/
structinformation
{charqid[15];
charqname[15];
charproducer[15];
charpd[15];
charqresult[15];
charqproblem[15];
charqpersons[15];
chartime[12];
structinformation*next;
};
/*函数声明*/
voidcreateRec();/*新建质检信息*/
voidloadRec();/*从磁盘文件导入质检信息到内存*/
voidsearchRecqid();/*查询质检信息(根据质检编号)*/
voidsearchRecpro();/*查询质检信息(根据生产者)*/
voidmodifyRec();/*修改质检信息*/
voiddeleteRec();/*删除质检信息*/
voidlistRec();/*显示所有质检信息*/
voidwriteInfo();/*保存质检信息*/
voidexit0();/*退出*/
intmenu_select();/*主菜单*/
intfqid(chara[]);//判断质检编号是否已被输入//
intcheck(chardate[])//判断日期是否合法//
{
intyear,month,day,i,leap;//要求格式判断//
for(i=0,year=0;i<4;i++)
year=year*10+(date[i]-'0');
for(i=5,month=0;i<7;i++)
month=month*10+(date[i]-'0');
for(i=8,day=0;i<10;i++)
day=day*10+(date[i]-'0');
if(month<0||month>12)
return0;
else//日期存在判断//
{
leap=(year%4==0&&year%100!
=0||year%400==0);
if(month==1||month==3||month==5||month==7||month==8||month==10||month==12)
{
if(day<0||day>31)
return0;
else
return1;
}
if(month==4||month==6||month==9||month==11)
{
if(day<0||day>30)
return0;
else
return1;
}
if(leap==1&&month==2)
{
if(day<0||day>29)
return0;
else
return1;
}
if(leap==0&&month==2)
{
if(day<0||day>28)
return0;
else
return1;
}
}
return0;
}
/*链表操作所用结构体指针*/
structinformation*head=NULL,*p1,*p2,*p3,*p0;/*定义结构体指针head为头指针p1为输入数据缓存空间指针p2为尾指针*/
/*质检记录保存标志全局变量*/
intwriteinfo_flag=0;
/*主函数*/
intmain()
{loadRec();
system("cls");
for(;;)
{switch(menu_select())
{case1:
system("cls");createRec();break;
case2:
system("cls");searchRecqid();break;
case3:
system("cls");searchRecpro();break;
case4:
system("cls");modifyRec();break;
case5:
system("cls");deleteRec();break;
case6:
system("cls");listRec();break;
case7:
system("cls");writeInfo();break;
case0:
system("cls");exit0();return0;
default:
{getchar();
printf("\n选择错误,请正确输入你的选择(0~7),:
");
printf("\n按任意键返回......\n");
getchar();
system("cls");/*清屏*/
}
}
}
return0;
}
/*主菜单*/
intmenu_select()
{intc,flag=1;
charw[10];
printf("\t\t**************菜单**************\n");
printf("\t\t\t1.新建质检信息\n");
printf("\t\t\t2.查询质检信息(质检编号)\n");
printf("\t\t\t3.查询质检信息(生产者)\n");
printf("\t\t\t4.修改质检信息\n");
printf("\t\t\t5.删除质检信息\n");
printf("\t\t\t6.显示所有信息\n");
printf("\t\t\t7.保存质检信息\n");
printf("\t\t\t0.退出(任何情况下按Ctrl+C退出程序)\n");
printf("\t\t********************************\n");
printf("\n输入你的选择(0~7):
");
do{
scanf("%s",w);
if(strlen(w)!
=1)
{
flag=0;
printf("\n选择错误,请正确输入你的选择(0~7):
");
}
elseif(strcmp(w,"0")<0||strcmp(w,"7")>0)
{
flag=0;
printf("\n选择错误,请正确输入你的选择(0~7):
");
}
else{
flag=1;
c=atoi(w);
}
}while(!
flag);
returnc;
}
/*从磁盘文件导入质检信息到内存*/
voidloadRec()
{FILE*fp;
intn=0;
if((fp=fopen("LY.txt","r"))==NULL)/*打开文件*/
{printf("文件不存在或无法打开!
\n");
system("pause");
return;
}
head=p1=(structinformation*)malloc(LEN);/*开辟一个新单元*/
memset(p1,0,LEN);
p1->next=NULL;
while(!
feof(fp))
{n++;
fscanf(fp,"%s%s%s%s%s%s%s%s\n",p1->qid,p1->qname,p1->producer,p1->pd,
p1->qresult,p1->qproblem,p1->qpersons,p1->time);
p2=(structinformation*)malloc(LEN);
p1->next=p2;
p3=p1;
p1=p2;
p1->next=NULL;
}
free(p2);
p3->next=NULL;
printf("\n%d项信息输入完毕,按任意键返回......\n",n);
getch();
system("cls");/*清屏*/
writeinfo_flag=0;/*设置保存记录标志*/
if(fclose(fp))/*关闭文件*/
{
printf("Cannotclosethefile!
\n");
exit(0);
}
return;
}
/*新建质检信息*/
voidcreateRec()
{
if(head!
=0){p3=head;
while(p3->next!
=NULL)
p3=p3->next;
printf("\n质检信息数据库已存在,新建质检信息将接续在信息库的后面,按任意键继续......:
\n");
getchar();
system("cls");/*清屏*/
p3->next=p1=(structinformation*)malloc(LEN);/*开辟一个新单元*/
}
else
head=p1=(structinformation*)malloc(LEN);/*开辟一个新单元*/
p1->next=NULL;
printf("\n请输入质检编号:
");
scanf("%s",p1->qid);
while(fqid(p1->qid)==1)
{
printf("\n您输入的质检编号已存在,请重新输入:
");//验证是否存在//
scanf("%s",p1->qid);
}
printf("\n请输入零部件名称:
");
scanf("%s",p1->qname);
printf("\n请输入生产者:
");
scanf("%s",p1->producer);
printf("\n请输入生产部门:
");
scanf("%s",p1->pd);
printf("\n请输入质检结果(合格/不合格):
");
scanf("%s",p1->qresult);
printf("\n请输入质检问题(无/设计缺陷/装配质量/加工质量):
");
scanf("%s",p1->qproblem);
printf("\n请输入质检员:
");
scanf("%s",p1->qpersons);
printf("\n请输入质检日期(形如2015-06-20):
");
scanf("%s",p1->time);
while((p1->time[4]!
='-')||(p1->time[7]!
='-')||strlen(p1->time)!
=10||check(p1->time)==0)/*判断开始统计的时间输入是否合法*/
{
printf("入住时间输入不合法,请重新输入:
");
scanf("%s",p1->time);
}
getchar();
p2=(structinformation*)malloc(LEN);/*开辟一个新单元*/
p1->next=p2;
p3=p1;
p1=p2;
p1->next=NULL;
free(p2);
p3->next=NULL;
printf("\n信息输入完毕,按任意键返回......\n");
getch();
system("cls");/*清屏*/
writeinfo_flag=1;
return;
}
/*查询质检信息(根据质检编号)*/
voidsearchRecqid()
{
charqid[10];
p1=head;
if(p1==NULL)
{printf("\n\n质检信息数据库为空!
!
!
\n");
printf("\n按任意键返回......\n");
getch();
system("cls");/*清屏*/
return;
}
printf("\n\n请输入质检编号以便查证:
");
scanf("%s",qid);
printf("\n质检编号零件名称生产者生产部门质检结果质检问题质检员质检日期\n");
while(p1!
=NULL)
{
if(strcmp(p1->qid,qid)==0)
{
printf("%-12s%-12s%-12s%-12s%-12s%-12s%-12s%-12s",p1->qid,p1->qname,p1->producer,p1->pd,
p1->qresult,p1->qproblem,p1->qpersons,p1->time);
break;
}
else
{
p1=p1->next;
}
}
if(p1==NULL)
printf("\n\n找不到该质检信息!
!
!
\n");
printf("\n按任意键返回......\n");
getch();
system("cls");
}
/*查询质检信息(根据生产者)*/
voidsearchRecpro()
{
inti=0;
charproducer[10];
p1=head;
if(p1==NULL)
{printf("\n\n质检信息数据库为空!
!
!
\n");
printf("\n按任意键返回......\n");
getch();
system("cls");/*清屏*/
return;
}
printf("\n\n请输入生产者以便查证:
");
scanf("%s",producer);
printf("\n质检编号零件名称生产者生产部门质检结果质检问题质检员质检日期\n");
while(p1!
=NULL)
{
if(strcmp(p1->producer,producer)==0)
{
printf("%-12s%-12s%-12s%-12s%-12s%-12s%-12s%-12s\n",p1->qid,p1->qname,p1->producer,p1->pd,
p1->qresult,p1->qproblem,p1->qpersons,p1->time);
i++;
p1=p1->next;
continue;
}
else
{
p1=p1->next;
}
}
if(p1==NULL)
printf("\n\n%d项质检信息输入完毕!
!
!
\n",i);
printf("\n按任意键返回......\n");
getch();
system("cls");
}
/*修改指定质检编号的信息*/
voidmodifyRec()
{
charqid[19];
if(head==NULL)
{getchar();
printf("\n产品信息数据库为空,不能修改,按任意键将返回:
\n");
getchar();
system("cls");