汕头职业技术学院
C语言课程实训报告
第二篇:c语言实训报告 (2)
HUBEI UNIVERSITY OF AUTOMOTIVE TECHNOLOGY
C语言程序设计
实训报告
实训题目: 汽车零部件质检管理系统
专 业: 软件工程
班 级: K1373-3
姓 名: 王扶夏
成 绩:
完成日期: 20##-1-18
指导教师: 陈艳海
课设报告内容:
一、-----------------------------设计题目与要求
二、-----------------------------系统设计
三、------------------------------程序测试与运行结果
四、------------------------------实训总结
五、------------------------------程序源代码
一、课设题目与要求:
汽车零部件质检管理程序
题目描述
已知在汽车零部件生产过程中,需要对生产的零部件进行质量检测,保证生产质量,以便对出现生产质量问题的责任人进行考核,设计一个汽车零部件质检管理程序,该程序应该具有完成如下功能:
(1)能从键盘输入质检信息。
(2)指定质检编号,显示质检信息。
(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");
system("color f0");
printf("\t\t\t**********************************************\n");
printf("\t\t\t* 菜单 *\n");
printf("\t\t\t**********************************************\n");
printf("\t\t\t* 1.读入文件 *\n");
printf("\t\t\t* 2.输入质检信息 *\n");
printf("\t\t\t* 3.通过质检编号显示质检信息 *\n");
printf("\t\t\t* 4.通过生产者显示质检信息 *\n");
printf("\t\t\t* 5.指定质检编号修改信息 *\n");
printf("\t\t\t* 6.指定质检编号删除信息 *\n");
printf("\t\t\t* 7.统计 *\n");
printf("\t\t\t* 8.保存文件 *\n");
printf("\t\t\t* 0.退出 *\n");
printf("\t\t\t**********************************************\n");
printf("\t\t\t 请输入选项(0~7):");
}
void readFile() // 读取文件
{
FILE *fp;
struct qualityTesting *sp,*newp,*sp2;
fp = fopen("data.txt","r");
if(fp == NULL)
{
printf("文件打开失败!");
exit(0);
}
headp = (struct qualityTesting *) malloc(sizeof(struct qualityTesting));
headp->next = NULL;
sp =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),&(newp->quality_person),&(newp->data));
count++;
newp->next = NULL;
sp->next = newp;
sp = sp->next;
}
sp->next = NULL;
headp1 = sp;
fclose(fp);
printf("计数器:%d\n",count);
printf("文件录入成功!\n");
sp2=headp->next;
while(sp2!=NULL)
{
printf("%d %s %s %s %s %s %s %s \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;
int cho=1;
sp = headp1;
while(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);
}
sp->next = NULL;
}
void quality_number_search() //通过质检编号显示质检信息
{
struct qualityTesting *sp;
int number;
sp = headp->next;
printf("\n请输入质检编号:");
scanf("%d",&number);
while(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;
}
system("pause");
}
void producer_search() //通过生产者显示质检信息
{
struct qualityTesting *sp;
char name[10];
sp = headp->next;
printf("\n请输入生产者:");
scanf("%s",&name);
while(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;
int number;
sp = headp->next;
printf("\n请输入质检编号:");
scanf("%d",&number);
while(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;
}
printf("修改成功!");
system("pause");
}
void quality_number_delete() //指定质检编号删除信息
{
struct qualityTesting *sp,*fellowp;
int number;
sp = headp->next;
fellowp = headp;
printf("\n请输入质检编号:");
scanf("%d",&number);
while(sp != NULL)
{
if(sp->quality_number == number)
{
fellowp->next = sp->next;
free(sp);
flag=1;
count--;
break;
}
fellowp = sp;
sp = sp->next;
}
if(flag == 1)
printf("删除成功!");
else
printf("删除失败!");
system("pause");
}
void saveFile() //保存文件
{
struct qualityTesting *sp,*fellowp;
FILE *fp2;
sp = headp->next;
fellowp = headp;
fp2 = fopen("data.txt","w");
while(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);
}
printf("保存成功!(链表清空完毕)");
system("pause");
}
void add() //统计
{
struct qualityTesting *sp;
sp = headp->next;
while(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;
}
printf("不合格次数:%d\n",a);
printf("设计缺陷次数:%d\n",b);
printf("装配质量次数:%d\n",c);
printf("加工质量次数:%d\n",d);
system("pause");
}
四、实训总结
通过本次实训,我发现我在c语言的学习上还存在很多的问题,而且对于一些基础知识的掌握还是不够熟练,本次实训的代码中很多地方都需要用到链表的知识,但是我发现我对链表的掌握很差,而且代码中的链表方面的知识还是在同学的的帮助下完成的,所以,在本次实训过后我发现我对链表方面知识的掌握有了进一步的提高。
而且在本次实训中,我发现c语言的学习其实并不是原来想象的那么难,只要对一些基本的知识点掌握的比较熟练了之后,对于一些简单的程序都可以很好的独立完成。所以作为一个计算机专业的学生,在以后的学习和其他各类计算机语言中,我要加强对基础知识的掌握,平时勤加练习,争取今早的掌握。
同时在本次实训中,我也遇到了一些困难和问题,但同时我也学会了一些面对困难时所必须的态度,这都是本次实训所带给我的。最后,我想说,虽然我的c语言基础不是很好,但是,我相信,只要我肯努力,我的c语言成绩肯定会更进一步的。
五、程序源代码
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<windows.h>
struct qualityTesting //结构体:质检信息
{
int quality_number; //质检编号
char part_name[20]; //零件名称
char producer[30]; //生产者
char production[30]; //生产部门
char result[10]; //质检结果(合格/不合格)
char problem[30]; //质检问题(设计缺陷/装配质量/加工质量)
char quality_person[30]; //质检员
char data[30]; //质检日期
struct qualityTesting *next;
};
struct qualityTesting *headp,*headp1; //头结点
int count=0; //计数器
int flag =0; //判断删除是否成功
int a=0; //统计不合格数量
int b=0,c=0,d=0; //统计各种质量问题出现次数
void menu() //菜单
{
system("cls");
system("color f0");
printf("\t\t\t**********************************************\n");
printf("\t\t\t* 菜单 *\n");
printf("\t\t\t**********************************************\n");
printf("\t\t\t* 1.读入文件 *\n");
printf("\t\t\t* 2.输入质检信息 *\n");
printf("\t\t\t* 3.通过质检编号显示质检信息 *\n");
printf("\t\t\t* 4.通过生产者显示质检信息 *\n");
printf("\t\t\t* 5.指定质检编号修改信息 *\n");
printf("\t\t\t* 6.指定质检编号删除信息 *\n");
printf("\t\t\t* 7.统计 *\n");
printf("\t\t\t* 8.保存文件 *\n");
printf("\t\t\t* 0.退出 *\n");
printf("\t\t\t**********************************************\n");
printf("\t\t\t 请输入选项(0~7):");
}
void readFile() // 读取文件
{
FILE *fp;
struct qualityTesting *sp,*newp,*sp2;
fp = fopen("data.txt","r");
if(fp == NULL)
{
printf("文件打开失败!");
exit(0);
}
headp = (struct qualityTesting *) malloc(sizeof(struct qualityTesting));
headp->next = NULL;
sp =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),&(newp->quality_person),&(newp->data));
count++;
newp->next = NULL;
sp->next = newp;
sp = sp->next;
}
sp->next = NULL;
headp1 = sp;
fclose(fp);
printf("计数器:%d\n",count);
printf("文件录入成功!\n");
sp2=headp->next;
while(sp2!=NULL)
{
printf("%d %s %s %s %s %s %s %s \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;
int cho=1;
sp = headp1;
while(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);
}
sp->next = NULL;
}
void quality_number_search() //通过质检编号显示质检信息
{
struct qualityTesting *sp;
int number;
sp = headp->next;
printf("\n请输入质检编号:");
scanf("%d",&number);
while(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;
}
system("pause");
}
void producer_search() //通过生产者显示质检信息
{
struct qualityTesting *sp;
char name[10];
sp = headp->next;
printf("\n请输入生产者:");
scanf("%s",&name);
while(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;
int number;
sp = headp->next;
printf("\n请输入质检编号:");
scanf("%d",&number);
while(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;
}
printf("修改成功!");
system("pause");
}
void quality_number_delete() //指定质检编号删除信息
{
struct qualityTesting *sp,*fellowp;
int number;
sp = headp->next;
fellowp = headp;
printf("\n请输入质检编号:");
scanf("%d",&number);
while(sp != NULL)
{
if(sp->quality_number == number)
{
fellowp->next = sp->next;
free(sp);
flag=1;
count--;
break;
}
fellowp = sp;
sp = sp->next;
}
if(flag == 1)
printf("删除成功!");
else
printf("删除失败!");
system("pause");
}
void saveFile() //保存文件
{
struct qualityTesting *sp,*fellowp;
FILE *fp2;
sp = headp->next;
fellowp = headp;
fp2 = fopen("data.txt","w");
while(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);
}
printf("保存成功!(链表清空完毕)");
system("pause");
}
void add() //统计
{
struct qualityTesting *sp;
sp = headp->next;
while(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;
}
printf("不合格次数:%d\n",a);
printf("设计缺陷次数:%d\n",b);
printf("装配质量次数:%d\n",c);
printf("加工质量次数:%d\n",d);
system("pause");
}
int main()
{
int choice;
while(1)
{
menu();
scanf("%d",&choice);
switch(choice)
{
case 1:readFile();break;
case 2:input();break;
case 3:quality_number_search();break;
case 4:producer_search();break;
case 5:quality_number_change();break;
case 6:quality_number_delete();break;
case 7:add();break;
case 8:saveFile();break;
case 0:return 0;break;
default:
printf("输入错误!请重新输入");
}
}
free(headp);
return 0;
}
20##年1月