HUBEI UNIVERSITY OF AUTOMOTIVE TECHNOLOGYC语言程序设计实训报告实训题目: 汽车零部件质检管理系统专业:班级:姓名:成绩:完成日期:指导教师:课设报告内容:一、-----------------------------设计题目与要求二、-----------------------------系统设计三、------------------------------程序测试与运行结果四、------------------------------实训总结五、------------------------------程序源代码一、课设题目与要求:汽车零部件质检管理程序题目描述已知在汽车零部件生产过程中,需要对生产的零部件进行质量检测,保证生产质量,以便对出现生产质量问题的责任人进行考核,设计一个汽车零部件质检管理程序,该程序应该具有完成如下功能:(1)能从键盘输入质检信息。
(3)指定生产者,显示质检信息。
(4)指定质检编号,修改质检信息。
(5)指定质检编号,删除质检信息。
题目要求:(1)按照分析、设计、编码、调试、测试的软件过程完成这个应用程序。
(2) 质检信息包括:质检编号、零部件名称、生产者、生产部门、质检结果(合格/不合格)、质量问题(设计缺陷/装配质量/加工质量)、质检员、质检日期。
(3) 为程序设计windows窗口,在该窗口上以按钮的形式为用户提供“菜单”,通过点击各个功能项对应的按钮完成操作。
输入要求:(1)用户可以根据需求,选定相应的操作项目。
进入每个操作后,通过窗口的文本框,从键盘输入相应的信息。
程序根据用户输入的信息完成相应的处理,实现要求的功能。
(2)能对输入的数据进行简单的校验,例如,质检日期必须是一个合法的日期格式,质检编号是唯一的(一个质检编号对应一次质检的质检信息)。
输出要求:(1)应用程序运行后,要在屏幕上显示一个按钮形式的“菜单”。
(2)要求用户输入数据时,给出清晰、明确的提示信息,包括输入的数据内容、格式以及结束方式等。
(3)在程序完成处理后,要清楚地给出程序的处理结果。
例如,在给定质检编号删除质检信息时,如果该质检信息不存在,要提示没能删除,如果删除成功要提示删除成功。
实现要求:(1)在程序中使用链表存储质检信息。
(2)采用模块化程序设计的方法,将程序中的各项功能用函数实现。
提示:(1)使用结构体表示质检信息,一个结点保存一条质检信息。
扩展功能:(1)提供一些统计功能。
例如统计生产者质检不合格的次数,统计各种质量问题出现次数。
(2)质检信息从文件读入。
(3)将质检信息保存到文件中。
二、系统设计(1)系统功能模块划分○1读取文件○2输入质检信息○3通过质检编号显示质检信息○4通过生产者显示质检信息○5指定质检编号修改信息○6指定质检编号删除信息○7保存文件(2)主函数的流程分析与设计void menu() //菜单{system("cls");s ystem("color f0");p rintf("\t\t\t**********************************************\n");p rintf("\t\t\t* 菜单*\n");p rintf("\t\t\t**********************************************\n");p rintf("\t\t\t* 1.读入文件*\n");p rintf("\t\t\t* 2.输入质检信息*\n");p rintf("\t\t\t* 3.通过质检编号显示质检信息*\n");p rintf("\t\t\t* 4.通过生产者显示质检信息*\n");p rintf("\t\t\t* 5.指定质检编号修改信息*\n");p rintf("\t\t\t* 6.指定质检编号删除信息*\n");p rintf("\t\t\t* 7.统计*\n");p rintf("\t\t\t* 8.保存文件*\n");p rintf("\t\t\t* 0.退出*\n");p rintf("\t\t\t**********************************************\n");p rintf("\t\t\t 请输入选项(0~7):");}void readFile() // 读取文件{F ILE *fp;s truct qualityTesting *sp,*newp,*sp2;f p = fopen("data.txt","r");i f(fp == NULL){printf("文件打开失败!");exit(0);}h eadp = (struct qualityTesting *) malloc(sizeof(struct qualityTesting));h eadp->next = NULL;s p =headp;while(!feof(fp)){newp = (struct qualityTesting *) malloc(sizeof(struct qualityTesting));fscanf(fp,"%d%s%s%s%s%s%s%s",&(newp->quality_number),&(newp->part_name),&(newp->producer),&(newp->production),&(newp->result),&(newp->problem),&(n ewp->quality_person),&(newp->data));count++;newp->next = NULL;sp->next = newp;sp = sp->next;}sp->next = NULL;h eadp1 = sp;f close(fp);p rintf("计数器:%d\n",count);printf("文件录入成功!\n");s p2=headp->next;w hile(sp2!=NULL){\n",sp2->quality_number,sp2->part_name,sp2->producer,sp2->production,sp2->result,sp2->problem,sp2->quality_person,sp2->data);sp2=sp2->next;}system("pause");}void input() //输入质检信息{struct qualityTesting *sp,*newp;i nt cho=1;s p = headp1;w hile(cho != 0){newp = (struct qualityTesting *) malloc(sizeof(struct qualityTesting));printf("请输入质检信息\n");printf("质检编号:");scanf("%d",&(newp->quality_number));printf("零件名称:");scanf("%s",&(newp->part_name));printf("生产者:");scanf("%s",&(newp->producer));printf("生产部门:");scanf("%s",&(newp->production));printf("质检结果(合格/不合格):");scanf("%s",&(newp->result));printf("质检问题(设计缺陷/装配质量/加工质量):");scanf("%s",&(newp->problem));printf("质检员:");scanf("%s",&(newp->quality_person));printf("质检日期:");scanf("%s",&(newp->data));newp->next = NULL;sp->next = newp;sp=sp->next;count++;printf("继续输入请输入数字键(退出:0)");scanf("%d",&cho);}s p->next = NULL;}void quality_number_search() //通过质检编号显示质检信息{struct qualityTesting *sp;i nt number;s p = headp->next;p rintf("\n请输入质检编号:");s canf("%d",&number);w hile(sp != NULL){if(sp->quality_number == number){printf("%d %s %s %s %s %s %s %s \n",sp->quality_number,sp->part_name,sp->producer,sp->production,sp->result,sp->problem,sp->quality_person,sp->data);break;}sp = sp->next;}s ystem("pause");}void producer_search() //通过生产者显示质检信息{struct qualityTesting *sp;c har name[10];s p = headp->next;p rintf("\n请输入生产者:");s canf("%s",&name);w hile(sp != NULL){if(strcmp(sp->producer,name) == 0){printf("%d %s %s %s %s %s %s %s \n",sp->quality_number,sp->part_name,sp->producer,sp->production,sp->result,sp->problem,sp->quality_person,sp->data);break;}sp = sp->next;}system("pause");void quality_number_change() //指定质检编号修改信息{struct qualityTesting *sp;i nt number;s p = headp->next;p rintf("\n请输入质检编号:");s canf("%d",&number);w hile(sp != NULL){if(sp->quality_number == number){printf("请输入质检信息\n");printf("质检编号:");scanf("%d",&(sp->quality_number));printf("零件名称:");scanf("%s",&(sp->part_name));printf("生产者:");scanf("%s",&(sp->producer));printf("生产部门:");scanf("%s",&(sp->production));printf("质检结果(合格/不合格):");scanf("%s",&(sp->result));printf("质检问题(设计缺陷/装配质量/加工质量):");scanf("%s",&(sp->problem));printf("质检员:");scanf("%s",&(sp->quality_person));printf("质检日期:");scanf("%s",&(sp->data));break;}sp = sp->next;}p rintf("修改成功!");s ystem("pause");}void quality_number_delete() //指定质检编号删除信息struct qualityTesting *sp,*fellowp;i nt number;s p = headp->next;f ellowp = headp;p rintf("\n请输入质检编号:");s canf("%d",&number);w hile(sp != NULL){if(sp->quality_number == number){fellowp->next = sp->next;free(sp);flag=1;count--;break;}fellowp = sp;sp = sp->next;}i f(flag == 1)printf("删除成功!");e lseprintf("删除失败!");s ystem("pause");}void saveFile() //保存文件{s truct qualityTesting *sp,*fellowp;F ILE *fp2;s p = headp->next;f ellowp = headp;f p2 = fopen("data.txt","w");w hile(sp != NULL){fprintf(fp2,"%d %s %s %s %s %s %s %s \n",sp->quality_number,sp->part_name,sp->producer,sp->production,sp->result,sp->problem,sp->quality_person,sp->data);fellowp = sp;sp = sp->next;free(fellowp);}p rintf("保存成功!(链表清空完毕)");s ystem("pause");}void add() //统计{s truct qualityTesting *sp;s p = headp->next;w hile(sp != NULL){if(strcmp(sp->result,"不合格") == 0)a++;if(strcmp(sp->problem,"设计缺陷") == 0)b++;if(strcmp(sp->problem,"装配质量") == 0)c++;if(strcmp(sp->problem,"加工质量") == 0)d++;sp = sp->next;}p rintf("不合格次数:%d\n",a);p rintf("设计缺陷次数:%d\n",b);p rintf("装配质量次数:%d\n",c);p rintf("加工质量次数:%d\n",d);s ystem("pause");}四、实训总结通过本次实训,我发现我在c语言的学习上还存在很多的问题,而且对于一些基础知识的掌握还是不够熟练,本次实训的代码中很多地方都需要用到链表的知识,但是我发现我对链表的掌握很差,而且代码中的链表方面的知识还是在同学的的帮助下完成的,所以,在本次实训过后我发现我对链表方面知识的掌握有了进一步的提高。