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