汽车零部件采购管理程序课件.pptx
,一 寸 光 阴 不 可 轻 HUBEI UNIVERSITY OF AUTOMOTIVE TECHNOLOGY,C 语言程序设计 课程设计报告,课设题目:汽车零部件采购管理专业:电子信息工程(汽车电子)班级:T1323-15姓名:徐倩成绩:完成日 期:XXXX 年 19 周指导教师:吴年志,0,一 寸 光 阴 不 可 轻,目录,1.课程设计目的-1,5.2 主菜单页面-13,1,6.3 采购信息输入调试-18,2,一 寸 光 阴 不 可 轻,1.课程设计目的通过课程设计,加深对结构化程序设计思想的理解,能对 系统功能进行分析,并设计合理的模块化结构。通过课程设计,进一步掌握 C 语言中重要的数据结构。掌 握并熟练运用指针、链表、结构体、文件等数据结构。通过课程设计,提高程序开发能力,能运用合理的控制流 编写清晰高效的程序。通过课程设计,培养 C 语言知识运用和自学能力,真正的把课堂上获得的知识运用起来,培养自己对程序编写的兴 趣,并能独立设计和实现一个小型系统。通过课程设计,加强了自己的程序分析能力。需求分析要求遵循软件开发过程的基本规范;能灵活应用,初步具备运 用C 程序解决实际问题的能力。运用结构化程序设计方法,按照课程设计题目要求,完成 包括需求分析、数据结构设计、概要设计、详细设计、编 写代码、调试和测试 C 程序等过程。学会利用数组、结构体、链表进行相关信息表示。功能模块划分清晰,系统结构图符合功能操作要求,且有 详尽的功能描述各主要功能模块有详尽的流程图及描述,用函数的形式实,3,一 寸 光 阴 不 可 轻 现,且调用入口、功能、出口等关系正确。所设计的C 程序较好的可读性和可靠性;程序书写风格规 范,注释清晰。界面友好(良好的人机互交),凡需要输入信息时,都有较详尽的提示信息,并对输入信息有较完善的值域分析。程序经上机调试通过,不应出现语法型、功能型错误,并 获得满意的结果。学会通过各功能性测试用例测试程序的能力,尽可能避免 原则性错误的出现。掌握编写、调试和测试 C 语言程序的基本技巧,充分理解结构化程序设计的基本方法。C 语言课程设计报告的内容反应实际设计过程,且符合 格式要求,无抄袭现象。2.2 任务描述已知在汽车生产时,需要向零部件生产厂商采购零部件,设计一个汽车零部件采购管理程序,以方便采购管理部门对 采购零部件的管理。该单位每次采购都有一个采购编号,每 次采购一种零部件。该程序应该具有如下功能1)添加并保存采购信息:输入采购编号,零部件名称,采购员名字,采购日期,采购价格,采购数量,供货单位,需要判断采购价格和数量是否大于零,采 购编号是否已存在,采购日期是否合法(形如*-*-*,例如XXXX-09-08)。2)根据采购编号查询零部件采购信息3)根据零部件名称查询其采购信息,一 寸 光 阴 不 可 轻 4)根据采购编号修改已有采购信息:需要判断修改后 的采购编号的唯一性,采购日期的合法性(形如*-*-*,例如XXXX-09-08)。5)根据采购编号删除此条采购信息6)统计功能运行环境VC+6.0 编译环境开发工具C 语言 总体设计系统流设计程序整体功能结构如图一所示:,开始,4,一 寸 光 阴 不 可 轻,统计 采 购信 息,显 示 所 有 采 购 信 息,显示主菜单,输入选择,显示课程以及学生信息,5,一 寸 光 阴 不 可 轻,3.2 系统模块设计,1)封面模块,函数void huanying()和函数void byebye(),构成封面模块,构造和谐人机环境。,2)菜单模块,函数void menu()和函数void choise()构成选,择菜单,二级菜单 void tongji()构成统计功能菜单。查询模块 函数 void numshow()和函数 void nameshow()分别实现根据采购编号和零部件名称查询采购信息的功能,其中 会有其他函数辅助。信息处理模块 函数 void change()实现信息修改功能,函数 void disapperr()实现信息删除功能,void input()实现信息添加功能,void save()实现信息保存功能,void listCG()实现信息显示功能,其中会有其他函数辅助。统计模块 函数 int number()实现根据零部件名称统计其,根据零部件名称统计其总数量,6,根据采购员名字统计其采购次数,7,一 寸 光 阴 不 可 轻 总数量功能,int times()实现根据采购员名字显示其采购次数 的功能,其中会有其他函数辅助。,函数 void checkdate()使用标志位方法实,6)日期审查模块现对时间的审查。,详细设计数据结构设计根据系统要求,采购信息包括:,为了能实现系统的优越性和c 语言的精华采用链表的建立采购信息记录表,示意图如下:,一 寸 光 阴 不 可 轻,4.2 模块接口设计1)所有函数声明,viod huanying();,/*封面函数,显示课程题目,学,生信息*/,void menu();,/*主菜单函数,显示各项功能,*/,void choise();,/*根据主菜单选择并执行功能,*/,void readinto();,/*读取文件内的采购信息,*/,void input();,/*从键盘添加采购信息并保存到文,/*显 示 所 有 采 购 信 息,件中*/voidlistCG();*/,void numshow();,/*根据采购编号查询对应采购信息,采购信息 2,采购信息 3,采购信息 1,8,9,一 寸 光 阴 不 可 轻 并显示*/,void nameshow();,/*根据零部件名称查询其采购信息,并显示*/,void change();,/*根据采购编号修改并显示采购信,息*/,void disapper();,/*根据采购编号删除并显示余下采,购信息*/,void tongji();,/*统计功能菜单,显示两项统计,功能*/,int number();,/*根据零部件名称统计其购买总数量,*/,int times();,/*根据采购员名字统计其采购次数,*/int checktime(int year,int month,int day);/*审 查 日 期 输 入 是 否 符 合 要 求*/voidbyebye();/*告 别 界 面*/void save();/*保存采购信息*/2)全局变量1,用于存储采购信息的结构体 struct buy;,一 寸 光 阴 不 可 轻 2,判断文件是否正确读入的标志位变量 int flag;3,用于存储采购信息的 结构体指针:structbuy*head=NULL,*p,*p1,*p2,*p3.3)主要模块的实现系统以 int main()为入口,首先调用 void huanying()显示课程名称和学生信息,调用 void menu()和 void choise()实现功能显示和功能选择。接着,按照用户的要求,调用 void numshow()或 void nameshow()实现查询功能,或调用 void change(),void disapper()实现修改和删除功能.不管 是删除还是修改还是添加都要调用 void save()实现信息保 存功能。添加和修改时还要调用 int checktime(int year,int month,int day)函数对时间审查。当不需要再执行各项功能时,调用 void byebye()退出 管理器。4.3 主要功能模块的流程图1)封面模块(以欢迎界面为例,退出界面与此类似),显示题目和学生信息,进入系统,10,一 寸 光 阴 不 可 轻 2)菜单模块,显示主菜单,接受用户输入选项,是否合法?,是否为 0?,执行用户所选功能,否,是,否,是否为 7?,是否合法?,是,否,退出管理系统,是,否,是,11,一 寸 光 阴 不 可 轻 3)查询模块(以根据采购编号查询采购信息为例),4)信息处理模块(以添加采购信息为例),5)统计模块(以根据零部件名称统计采购总数量为例),输入所查询采购编号,编号是否存在,显示编号对应采购信息,返回主菜单页面,输入采购编号,是否已存在,主菜单,输入采购时间,是否合格?,输入其他信息,显示添加信息,是,否,是,否,12,一 寸 光 阴 不 可 轻,6)日期审查模块,输入零部件名称,s=0,是否存在?,返回主菜单,s 加上其数量,否,是,输入采购时间,并将其表示成 y,m,d,调用 void checktime()函数,是否合格,返回 1,返回 0,是,否,13,一 寸 光 阴 不 可 轻 运行结果欢迎界面,5.2 主菜单,14,一 寸 光 阴 不 可 轻 5.3 信息查询页面,5.4 统计菜单页面,15,一 寸 光 阴 不 可 轻 5.5 显示信息页面,5.6 退出页面,16,一 寸 光 阴 不 可 轻 6.程序调试与测试测试数据:,6.1 主菜单选择测试若用户输入错误选项,则如图显示:,17,一 寸 光 阴 不 可 轻 6.2 采购信息未从文件读入,18,一 寸 光 阴 不 可 轻 2)若添加的采购信息日期格式输入错误,则如图显示,3)若查询的采购编号输入错误,则如图显示,4)若查询的零部件名称输入错误,则如图显示,19,一 寸 光 阴 不 可 轻,5)若输入价格为负数时,如图显示,6)若输入的数量为负值时,如图显示,20,一 寸 光 阴 不 可 轻,7.问题与不足1、需求分析中存在的问题每次只能从键盘中添加一条采购信息,当遇到需要添加多条信 息时,比较麻烦。统计功能太少,如果要求几个零部件的总价,无法 实现。2、程序中存在的缺陷每次运行其他功能前都要先从文件中读入,比较耗时。有些功能 输入错误时无法重新输入,而是直接跳到主菜单。缓存较多。,21,22,一 寸 光 阴 不 可 轻,建议题目应更加贴近生活,这样可以让同学们看到 c 语言的有用之 处,激发同学们的学习热情。课程设计的题目涉及范围应该更广。程序设计的功能应相对更加复杂一点,这样有利培养同学们的分析 问题,解决问题的能力,同时也能提高同学们对代码的掌握能力。再者,就是验收时应该要学生画出链表结构图,帮助他们更加深刻 的掌握知识。编程体会 经历了编c 语言课程设计后,我对这一学期 c 语言所学内容有了 更加深刻的了解和掌握,特别是一直不懂的链表和指针,现在发现自 己都能运用了,很开心自己的进步。所以,虽然写程序的过程中,遇 到各种问题,调试的时候也是遇到各种令人头大的问题,但能借助课 程设计提高自己对指针和链表的熟练度,提高自己对 c 语言编程的熟 练度,也希望学校可以多开设一些这样的课程,既是让我们对自己所 学知识的一个综合理解与使用,也可以提高我们的动手实践能力、对 知识的运用能力,更是一个让我们学会独立思考的好机会。程序源代码#include#include#include#include#include#include#define LEN sizeof(struct buy)/申请结构体空间#define N 100,23,一 寸 光 阴 不 可 轻/*申明程序中运用的函数*/void huanying();/封面函数 void readinto();/读 取 文 件,/添加采购信息,void input();void listCG();void numshow();,/显示采购信息/根据采购编号显示采购信息,void nameshow();/根据零部件名称显示采购信息 void change();/修 改 采 购 信 息 void disapper();/删 除 采 购 信 息 void menu();/显示主菜单 void choise();/选择所需功能 void tongji();/统 计 功 能 菜 单 int number();/根据零部件名称统计采购的零部件总数量 int times();/根据采购员名字统计采购的零部件总数量 int checkdate(int year,int month,int day);/检测时间,/告别界面/保存文件,void byebye();void save();,/*定义全局变量*/struct buy/定 义 结 构 体 char buynum10;char itemname10;char day30;char buyername10;int count;float price;char source10;struct buy*next;int flag=0;/*flag 为文件是否以正确读入的标志位*/struct buy*head=NULL,*p,*p1,*p2,*p3;/*定义结构体指针*/*主函数*/int main()huanying();getch();while(1),24,/*封面函数*/void huanying()printf(nnntt*n);printf(tt*n);printf(tt*c 语 言 课 程 设 计*n);printf(tt*n);printf(tt*学 生 姓 名:徐 倩*n);printf(tt*指 导 老 师:吴 年 志*n);printf(tt*班 级:T1323-15*n);printf(tt*学 号:XXXX0231538*n);printf(tt*联 系 方 式:18772961357(69180)*n);printf(tt*n);printf(tt*课程题目:汽车零部件采购管理程序*n);printf(tt*n);printf(tt*n);fflush(stdin);printf(请按回车键继续);,25,一 寸 光 阴 不 可 轻/*告别界面*/void byebye()printf(nnntt*n);printf(tt*n);*n);,printf(tt*,*n);printf(tt*,printf(tt*,*n);*n);,printf(tt*,*n);printf(tt*n);printf(tt*,*n);,printf(tt*n);printf(tt*欢迎下次使 用*n);printf(tt*n);/*主菜单函数*/void menu()system(cls);printf(nnntt*欢迎使用汽车零部件管 理系统*n);printf(tt|tttt|n);printf(tt|tt1,读取采购信息ttt|n);printf(tt|tttt|n);printf(tt|tt2,从键盘添加并保存采购信息t|n);,26,一 寸 光 阴 不 可 轻 printf(tt|tttt|n);printf(tt|tt3,根据采购编号查找零件信息t|n);printf(tt|tttt|n);printf(tt|tt4,根据零部件名称查找采购信息t|n);printf(tt|tttt|n);printf(tt|tt5,修改并保存采购信息tt|n);printf(tt|tttt|n);printf(tt|tt6,删除并保存余下采购信息t|n);printf(tt|tttt|n);printf(tt|tt7,统计采购信息ttt|n);printf(tt|tttt|n);printf(tt|tt8,显示采购信息ttt|n);printf(tt|tttt|n);printf(tt|tt0,退出管理系统ttt|n);printf(tt*n);/*读入文件函数*/void readinto()FILE*fp;/*文 件 指 针*/int n=0;if(fp=fopen(lingjian.txt,r)=NULL)/*打开文件时无此文件*/,p1=(struct buy*)malloc(LEN);head=p1;p1-next=NULL;,while(!feof(fp)/*读取文件内的信息*/,printf(文件打开错误:n);exit(0);,fscanf(fp,%s%s%s%s%d%f%s,p1-buynum,p1-itemname,p1-day,p1-buyername,27,一 寸 光 阴 不 可 轻,/*关闭文件*/,free(p2);p3-next=NULL;fclose(fp);flag=1;,printf(文件读取成功!n);listCG();,p3=p1;p1=p2;p1-next=NULL;,/*选择所需功能 函数*/void choise(),case 1:system(cls);/*清屏*/,readinto();break;,case 2:system(cls);,input();break;,case 3:system(cls);,numshow();break;,case 4:system(cls);,nameshow();break;,case 5:system(cls);,change();break;,int n;printf(-请从键盘输入您的选择(0-8内的整数):);scanf(%d,switch(n),case 6:system(cls);,28,一 寸 光 阴 不 可 轻,tongji();break;,case 8:system(cls);,listCG();break;,case 0:system(cls);byebye();exit(0);,disapper();break;case 7:system(cls);,/*从键盘添加并保存 采购信息函数*/void input()int n=0,i=0,k;char ch;long y,m,d;if(flag=0),printf(未建立,采购信息数据库为空n);printf(按任意键返回);getch();,return;printf(请输入将要添加的采购编号(形如001002,以回车键结束)n);,fflush(stdin);scanf(%s,p2-buynum);p1=head;while(p1!=NULL)if(strcmp(p2-buynum,p1-buynum)=0),/*找到数据库,信息中与输入相同的采购编号*/,29,一 寸 光 阴 不 可 轻,p1=p1-next;,if(n!=1),printf(请输入);p2=(struct buy*)malloc(LEN);/开 辟 一 个 新 单 元 fflush(stdin);,for(i=0;i7;i+),printf(采购价格:%fn,p1-price);printf(供货单位:%sn,p1-source);n=1;/*标志位*/printf(请按任意键返回!n);getch();system(cls);break;,system(cls);p1=head;while(p1-next!=NULL)p1=p1-next;,if(i=0)fflush(stdin);printf(采购编号(数字字符串型):);scanf(%s,p2-buynum);,if(i=1),30,一 寸 光 阴 不 可 轻 y=(p2-day0-48)*1000+(p2-day1-48)*100+(p2-day2-48)*10+(p2-day3-48);m=(p2-day5-48)*10+(p2-day6-48);d=(p2-day8-48)*10+(p2-day9-48);k=checkdate(y,m,d);/*根据函数返回值 判断是否要重新输入*/,if(i=4),fflush(stdin);printf(采购数量(文字或英文字符串型,以回车键结束):);scanf(%d,if(i=5),fflush(stdin);printf(采购价格(数字型,以回车键结束):);scanf(%f,if(k=1)break;while(1);if(i=3)fflush(stdin);printf(采购员名字(文字或英文字符串型,以回车键结束):);scanf(%s,p2-buyername);,if(i=6),31,一 寸 光 阴 不 可 轻,save();printf(按任意键返回);fflush(stdin);scanf(%c,/*根据采购编号查找 采购信息函数*/void numshow(),char anum10,ch;p1=head;if(p1=NULL),printf(采购信息数据库为空n);printf(按任意键返回);getch();system(cls);exit(0);,32,一 寸 光 阴 不 可 轻 printf(请输入所查零件编号(形如000001,以回车键结束):n);getchar();scanf(%s,anum);while(p1!=NULL)if(strcmp(anum,p1-buynum)=0)/*找到与信息数据库 中与输入相同的采购编号*/,else p1=p1-next;if(p1=NULL),/*p1=NULL 表示到最后都没有找到与,信息数据库中与输入相同的零部件名称*/printf(文件中没有您所查找的采购信息,请核对您的采购编号是否输 入正确!n);,printf(按任意键返回);fflush(stdin);scanf(%c,printf(请按任意键返回返回!);fflush(stdin);scanf(%c,/*根据采购零部件 名称查找采购信息*/void nameshow()char aname10,ch;int n=0;p1=head;if(p1=NULL),33,一 寸 光 阴 不 可 轻,else p1=p1-next;,if(strcmp(p1-itemname,aname)=0)printf(采购编号:%sn,p1-buynum);printf(零部件名称:%sn,p1-itemname);printf(采购日期:%dn,p1-day);printf(采购员名字:%sn,p1-buyername);printf(采购数量:%dn,p1-count);printf(采购单价:%fn,p1-price);printf(供货单位:%sn,p1-source);n=1;,if(n!=1),printf(采购信息数据库为空n);printf(按任意键返回);getch();system(cls);exit(0);printf(请输入所查零件名称(以回车键结束):n);fflush(stdin);scanf(%s,aname);while(p1!=NULL),printf(文件中没有您所查找的采购信息,请核对您的零部件名称是否,输入正确!n);,printf(按任意键返回);fflush(stdin);scanf(%c,printf(请按任意键返回返回!);fflush(stdin);scanf(%c,/*删除并保存余下采 购信息函数*/void disapper(),34,一 寸 光 阴 不 可 轻,/*flag=0 表示未建,char anum10,ch;if(flag=0)立文件,标志位法*/,return;,if(head=NULL)printf(n 采购信息数据库为空,无法删除,请按任意键返回:n);getch();system(cls);return;,p1=head;/*p1 指 向 头 结 点*/printf(请输入要删除的采购信息编号:n);fflush(stdin);scanf(%s,anum);while(strcmp(anum,p1-buynum)!=0&p1-next!=NULL)/*,找到要删除的学号*/,if(strcmp(anum,p1-buynum)=0),p2=p1;p1=p1-next;,if(head-next=NULL)/*只有一个节点的情况,*/,35,一 寸 光 阴 不 可 轻,else printf(找不到此采购编号对应的采购信息,请核您输入的采购编号是 否正确!);printf(按任意键返回:n);fflush(stdin);printf(按任意键返回);fflush(stdin);scanf(%c,/*修改并保存采 购信息函数*/void change(),if(flag=0),char anum10,ch;int t,k;long y,m,d;,printf(未建立,采购信息数据库为空n);printf(按任意键返回);getch();,return;,if(head=NULL)printf(n 采购信息数据库为空,无法修改,请按任意键返回:n);getch();system(cls);return;,p1=head;printf(请输入要修改采购信息的采购编号(形如001002,以空格键结,36,一 寸 光 阴 不 可 轻,束):n);,p1=p1-next;if(strcmp(anum,p1-buynum)=0),printf(是否修改采购编号?是(1)否(0));,/*判断各项是否需要修改*/,printf(是否修改零部件名称?是(1)否(0));scanf(%d,if(t=1),printf(请输入修改后的零部件名称:n);fflush(stdin);scanf(%s,p1-itemname);,printf(是否修改采购日期?是(1)否(0));scanf(%d,if(t=1),fflush(stdin);scanf(%s,anum);while(strcmp(anum,p1-buynum)!=0&p1-next!=NULL),scanf(%d,do printf(请输入修改后的采购日期(形如*-*-*,以回车键,结束):);,if(p2-day4=-&p2-day7=-&strlen(p2-day)=10),fflush(stdin);scanf(%s,p2-day);,y=(p2-day0-48)*1000+(p2-day1-48)*100+(p2-day2-48)*10+(p2,-day3-48);,是否要重新输入*/,37,一 寸 光 阴 不 可 轻,38,一 寸 光 阴 不 可 轻,else printf(文件中没有您所查找的采购信息,请核对您的零部件名称是否 输入正确!n);printf(按任意键返回);fflush(stdin);scanf(%c,/*x 赋值为函数返回的零部件总数 量*/,printf(总数量为%dn,x);break;,case 2:system(cls);y=times();/*y 赋值为函数返回的采购次数,*/,printf(采购次数为%dn,y);break;,default:,39,一 寸 光 阴 不 可 轻,printf(按任意键返回);fflush(stdin);scanf(%c,/*检查信息 数据库是否为空*/,printf(请输入所查零件名称(以回车键结束):n);fflush(stdin);scanf(%s,aname);while(p1!=NULL),printf(按任意键返回);getch();system(cls);exit(0);,if(strcmp(p1-itemname,aname)=0)/*找到信息数据库中与,输入相同的零部件名称*/,if(t!=1)printf(文件中没有您所查找的采购信息,请核对您的零部件名称是否 输入正确!n);,40,一 寸 光 阴 不 可 轻 return n;/*根据采购员名字 统计采购员采购次数*/int times()int t=0,k=0;char ename10;p1=head;if(p1=NULL)/*检 查 信 息 数 据 库 是 否 为 空*/,printf(请输入所查采购员名字(以回车键结束):n);getchar();gets(ename);while(p1!=NULL)if(strcmp(p1-buyername,ename)=0)/*找到信息数据库中与 输入相同的采购员名字*/,if(k!=1)printf(文件中没有您所查找的采购信息,请核对您的采购员名字是否 输入正确!n);return t;/*判断时 间输入是否合法*/int checkdate(int year,int month,int day),41,一 寸 光 阴 不 可 轻,/*标志位法,int n=0;*/,if(year0&year0&month12)if(year%4=0&year%100!=0)|(year%4=0&year%400=0)/*闰年*/,if(month=1|month=3|month=5|month=7|month=8|month=10|m onth=12),else/*平年*/,if(month=1|month=3|month=5|month=7|month=8|month=10|m,42,一 寸 光 阴 不 可 轻,onth=12),if(month=4|month=6|month=9|month=11),else n=0;,if(day0,return n;,if(day0,/*显示所有 信息*/void listCG(),printf(按任意键返回);fflush(stdin);scanf(%c,char ch;p3=head;while(p3!=NULL)printf(采购编号:%sn,p3-buynum);printf(零部件名称:%sn,p3-itemname);printf(采购日期:%sn,p3-day);printf(采购员名字:%sn,p3-buyername);printf(采购数量:%dn,p3-count);printf(采购单价:%fn,p3-price);printf(供货单位:%sn,p3-source);printf(nn);p3=p3-next;,43,一 寸 光 阴 不 可 轻/*保存采购信息信 息*/void save(),if(flag=0),printf(n 数据库中采购信息已保存过,按任意键返回。n);getch();system(cls);,if(fp=fopen(lingjian.txt,w)=NULL)/*打开文件*/,fflush(stdin);system(cls);,printf(n 文件打开错误!请按任意键返回!n);getch();,p1=head;while(p1!=NULL),FILE*fp;/*定义文件指针*/if(head=NULL)printf(n 数据库中没有采购信息,按任意键返回。n);getch();system(cls);,fprintf(fp,%s%s%s%s%d%f%s,p1-buynum,p1-itemname,p1-day,p1-buyername,p1-count,p1-price,fclose(fp);printf(n 数据库中采购信息保存完毕!请按任意键返回!n);getch();fflush(stdin);,flag=0;/*设置保存记录标志*/,44,一 寸 光 阴 不 可 轻,45,一 寸 光 阴 不 可 轻,