C语言课程设计报告-药品销售管理系统.doc_第1页
C语言课程设计报告-药品销售管理系统.doc_第2页
C语言课程设计报告-药品销售管理系统.doc_第3页
C语言课程设计报告-药品销售管理系统.doc_第4页
C语言课程设计报告-药品销售管理系统.doc_第5页
已阅读5页,还剩30页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

计算机科学学院课程设计报告武汉纺织大学数学与计算机学院C语言程序设计课程设计报告题目: 药品销售管理系统 专业班级: 计算机类11508班 学 号: 学生姓名: 指导教师: 2016年 5 月 30日一、 引言通过本课程设计,使自己更加系统地理解和C语言专业学习的基本概念;能自如地根据实际要求,设计相应的程序设计,并运用C语言实现所设计的算法,编写较大型的程序,分析和解决实际问题进一步加深和巩固所学专业课程的基本理论知识,理论联系实际,进一步培养自己综合分析问题和解决问题的能力。掌握C语言独立的编写、调试应用程序和进行其它相关设计的技能。此项目主要是考察我们对结构体、数组、文件等具体操作,以及对C语言语法的掌握,所以完成此项目要求比较高的设计要求,对整体有很熟悉的概括,同时调试过程也是很重要的,对程序界面的要求也比较高,要设计的合理同时也要美观一点,能够人性化的描述清楚你的各个功能,一目了然,对其他用户使用本程序简单易懂,这才能成本程序或本系统是成功的。这个设计能够练习我们的理解和运用结构化程序设计的思想和方法,掌握开发一个小型实用系统的基本方法,学会调试一个比较长的程序的基本方法,同时掌握书写程序设计开发文档的能力。2、 系统介绍:1.设计平台介绍:VisualC+不仅仅是是一个C+编译器,而是一个基于Windows操作系统的可视化集成开发环境,这种环境开发出来的软件定性好、可移植性强,可以编制各种各样的Windows应用程序。2.介绍开发的系统功能和解决的问题:该系统实现对若干个大药品的种类进行管理和销售统计。包括以下信息:药品编号、名称、价格、类型,生产日期,保质期,库存等。具备药品信息的查询(多种查询方式),修改,删除,添加等基本功能,解决药品销售的管理与统计问题。3.说明涵盖的知识点及技术难点分析:本系统涉及到的知识点包括顺序结构、选择结构、循环结构、数组、指针、函数、结构体及文件操作,技术难点在于文件的读写操作,结构体的定义,函数功能的划分与程序的调试等。要求编写者熟练掌握C语言基本知识,独立调试程序,学会知识的拓展与查阅资料。三、模块设计:1.功能模块创建药品管理文件:如果药品管理文件不存在,则创建一个新的药品管理文件,并输入信息,输入药品名称为“*”结束录入。(当录入相同的名称时,系统会提示,并请重新录入)。保存药品信息:将链表中的信息写入到文件。读取药品信息:从文件中读取信息到链表中。显示所有药品信息:选择此功能时,先将药品管理文件中的信息读取到链表中,然后显示链表中的所有信息。添加药品信息:选择此功能时,先将药品管理文件中的信息读取到链表中,然后在链表尾节点后增加一个新节点,录入新数据,并询问用户是否保存修改?用户输入y,就保存修改,否则不保存。修改药品信息:选择此功能时,先将药品管理文件中的信息读取到链表中,根据用户输入的药品名称,查找到该药品,然后输入改药品的信息,并询问用户是否保存修改?用户输入y,就保存修改,否则不保存。查找药品:先将药品管理文件中的信息读取到链表中,该菜单项分为3个子菜单,按名称查找、按类型查找和按编号查找。用户选择子菜单后,就按照用户输入的信息进行链表的查找。显示过期时间:读取所有药品信息,根据生产日期与保质期计算出药品过期时间。药品销售管理:销售时输入药品编号和数量,库存数减少对应数量,当库存数不足,提示重新输入,且药品库存数不变,当输入0代表销售结束,计算销售数量与销售额。删除功能:先将药品文件中的信息读取到链表中,根据用户输入的名称,进行删除,并询问用户是否保存修改?用户输入y,就保存修改,否则不保存。退出:退出通讯录管理系统。2. 系统详细设计文档主菜单创建退出销售期限查询删除修改添加显示类型名称编号3. 用图示的方式给出各模块中过程或函数之间的调用关系(流程图等)YN名称是否为*号 开始药品管理文件已经存在?结束YYN新建药品管理文件 输入新建药品的名称N名称和编号是否重复Y输入药品其他信息追加在链表尾部是否保 存YN调用保存函数NN是否到了链表尾部? 开始 读取管理文件成功? 结束YY打印药品信息 结点指针后移N开始读取信息管理文件成功?结束N 移动指针到链表尾部 输入新建药品的名称与编号Y 编号和名称是否重复?Y 输入药品其他信息 追加在链表尾部 是否保存?YN 调用保存函数 输入编号是否一致?是否有重复?N 输入其他信息YY 指向下一结点N 开始读取药品管理文件成功? 结束N输入需要修改的名称Y 是否链表尾部?N 是否保存?YN 调用保存函数Y Y名称是否一致? 指向下一结点N开始读取信息管理文件成功? 结束N输入需要删除的名称Y 是否链表尾部?N 是否保存?YN 调用保存函数 确定要删除吗?Y删除该结点 调用保存函数开 始查找子菜单输入查找条件是否到达链表尾部?打印信息,指针后移是否继续?结 束是否是否编号名称类型是否在链表尾部开 始从链表中读取生产日期 和保质期否计算并打印过期时间结束是是结束开 始输入药品 编号和数量编号为0?库存大于0?库存数量,计算价格是否重新销售? 结 束输出总价及件数否是是否编号存在?否是否是药品库存以及总价不变四、程序清单:#includestdio.h#includestdlib.h#includestring.h#includeconio.hstruct production_date int year; int month; int day; /定义结构体记录生产日期struct medcine_info int no; /编号 int num; /数量 int life; /保质期 double price; /价格 char name10; /名称 char style10; /药品类型 struct production_date date1; /生产日期 struct medcine_info *next; /下一个指针; /定义结构体记录药品信息typedef struct medcine_info ID;void Showmenu(); /显示主菜单ID* Create(); /创建函数ID* ReadFromFile(); /从文件读取信息void Display(ID* head); /显示函数void WriteToFile(ID *head); /将信息写入文件ID* InputRecord(ID* head); /添加药品信息ID* ChangeRecord(ID* head); /修改药品信息ID* DeleteRecord(ID* head); /删除void Query(ID* head); /查询void Date(ID* head); /保质期计算void Sale(ID *head); /销售int main() ID *head; int choice; while(1) Showmenu(); printf(n请输入所选功能的序号:); scanf(%d,choice); system(cls); switch(choice) case 1: head=Create(); break; case 2: head=ReadFromFile(); if(head!=NULL) Display(head); break; case 3: head=ReadFromFile(); if(head!=NULL) head=InputRecord(head); break; case 4: head=ReadFromFile(); if(head!=NULL) head=DeleteRecord(head); break; case 5: head=ReadFromFile(); if(head!=NULL) Query(head); break; case 6: head=ReadFromFile(); if(head!=NULL) head=ChangeRecord(head); break; case 7: head=ReadFromFile(); if(head!=NULL) Date(head); break; case 8: head=ReadFromFile(); if(head!=NULL) Sale(head); WriteToFile(head); break; case 9: exit(0); break; default: printf(输入错误,请重新输入n); getch(); void Showmenu() system(cls); printf(=药品管理系统=nn); printf(t1.创建信息文件); printf(t 2.查看药品列表nn); printf(t3.添加药品信息); printf(t 4.删除药品信息nn); printf(t5.查找特定药品); printf(t 6.修改药品信息nn); printf(t7.药品过期时间); printf(t 8.药品销售管理nn); printf(t9.退出管理系统nn); printf(=n);void WriteToFile(ID *head) FILE *fp; ID* pchk; if(fp=fopen(medcine_info.txt,w+)=NULL) printf(n打开文件失败,按任意键返回!n); getch(); exit(0); /判断是否能打开文件 pchk=head; while(pchk!=NULL) fprintf(fp,n%d %d %d %d %d %d %lf %s %s,pchk-no,pchk-num,pchk-date1.year,pchk-date1.month,pchk-date1.day,pchk-life,pchk-price,pchk-name,pchk-style); pchk=pchk-next; /指针指向下一个结点 fclose(fp); printf(n文件保存成功n); printf(n请按任意键返回主菜单n); getch();ID* ReadFromFile() FILE *fp; ID *t1,*t2,*head=NULL; /清空链表 if(fp=fopen(medcine_info.txt,r)=NULL) printf(打开文件失败!没有该文件n); printf(请按任意键返回主菜单); getch(); return 0; rewind(fp); /指针移动到文件头部 t1=(ID *)malloc(sizeof(ID); /分配空间 head=t2=t1; while(!feof(fp) /当没有到文件尾 fscanf(fp,n%d %d %d %d %d %d %lf %s %s,t1-no,t1-num,t1-date1.year,t1-date1.month,t1-date1.day,t1-life,t1-price,t1-name,t1-style); t1-next=(ID *)malloc(sizeof(ID); t2=t1; t1=t1-next; t2-next=NULL; /t2作为尾结点 fclose(fp); return head;ID* Create() FILE *fp; ID *head,*tail,*pnew,*pchk; char Saveflag; /存储标记 if (fp=fopen(medcine_info.txt,r)!=NULL) printf(n药品信息文件已经存在,不能重复创建!按任意键返回主菜单!n); getch(); return 0; else head=pnew=tail=NULL; while(1) flag: pnew= (ID*)malloc(sizeof(ID); pnew-next=NULL; printf(n请输入药品名称(输入*可结束录入):n); scanf(%9s,pnew-name); if(strcmp(pnew-name,*)=0) break; fflush(stdin); printf(n请输入编号:); scanf(%d,pnew-no); pchk=head; while(pchk!=NULL) if(strcmp(pnew-name,pchk-name)=0)(pnew-no=pchk-no) free(pnew); printf(你重复输入了,按任意键重新输入!n); goto flag; pchk=pchk-next; printf(n请输入数量:); scanf(%d,pnew-num); printf(n请输入生产日期:); scanf(%d%d%d,pnew-date1.year,pnew-date1.month,pnew-date1.day); printf(n请输入保质期:); scanf(%d,pnew-life); printf(n请输入价格:); scanf(%lf,pnew-price); printf(n请输入类别:); scanf(%9s,pnew-style); pnew-name9=0; pnew-style9=0; if(head=NULL) head=tail=pnew; else tail-next=pnew; tail=pnew; tail-next=NULL; free(pnew); getchar(); printf(需要保存吗?(Y/N)n); scanf(%c,Saveflag); if(Saveflag=Y|Saveflag=y) WriteToFile(head); return head;void Display(ID* head) ID *p; p=head; printf(n编号 名称 类型 价格 数量 生产日期 保质期nn); while(p!=NULL) printf(%-3d %-9s %-9s%-4.1lf %-4d %4d年%2d月%2d日 %d天nn,p-no,p-name,p-style,p-price,p-num,p-date1.year,p-date1.month,p-date1.day,p-life); p=p-next; printf(n显示成功,按任意键返回主菜单); getch();ID* InputRecord(ID* head) char saveflag,addflag=y; ID *p1,*p2,*pa; p2=p1=head; system(cls); while(p1-next!=NULL) p1=p1-next; while(addflag=y|addflag=Y) mylab: pa=(ID *) malloc(sizeof(ID); printf(n请输入药品名称:); scanf(%9s,pa-name); printf(n请输入编号:); scanf(%d,pa-no); p2=head; while(p2!=NULL) if(strcmp(pa-name,p2-name)=0)(pa-no=p2-no) free(pa); printf(你重复输入了!按任意键继续n); getch(); goto mylab; p2=p2-next; printf(n请输入药品数量:); scanf(%d,pa-num); printf(n请输入生产日期:); scanf(%d%d%d,pa-date1.year,pa-date1.month,pa-date1.day); printf(n请输入保质期:); scanf(%d,pa-life); printf(n请输入价格:); scanf(%lf,pa-price); printf(n请输入类别:); scanf(%9s,pa-style); pa-name9=0; pa-style9=0; p1-next=pa; p1=pa; p1-next=NULL; printf(n是否继续添加?(Y/N)n); fflush(stdin); scanf(%c,addflag); printf(n是否保存?(Y/N)n); fflush(stdin); scanf(%c,saveflag); if(saveflag=y|saveflag=Y) WriteToFile(head); free(pa); return(head);ID* ChangeRecord(ID* head) ID *p1; char saveflag,name10; int item,flag=0; p1=head; system(cls); printf(n请输入需要修改的药品名称:n); scanf(%9s,name); while(p1!=NULL) if(strcmp(p1-name,name)=0) flag=1; printf(n你要修改的药品信息为:n); printf(n编号:%dn名称:%sn类型:%sn价格:%4.2lfn数量:%dn生产日期:%d-%d-%dn保质期:%dn,p1-no,p1-name,p1-style,p1-price,p1-num,p1-date1.year,p1-date1.month,p1-date1.day,p1-life); printf(n请选择需要修改的项目:n1.编号n2.名称;n3.类型;n4.价格;n5.数量;n6.生产日期n7.保质期;n); scanf(%d,item); switch(item) case 1: printf(n请输入修改后的编号:n); fflush(stdin); scanf(%d,p1-no); p1-name9=0; break; case 2: printf(n请输入修改后的名称:n); fflush(stdin); scanf(%9s,p1-name); p1-name9=0; break; case 3: printf(请输入修改后的类型:n); fflush(stdin); scanf(%9s,p1-style); p1-style9=0; break; case 4: printf(请输入修改后的价格:n); fflush(stdin); scanf(%lf,p1-price); break; case 5: printf(请输入修改后的数量:n); fflush(stdin); scanf(%lf,p1-num); break; case 6: printf(请输入修改后的生产日期:n); fflush(stdin); scanf(%d%d%d,p1-date1.year,p1-date1.month,p1-date1.day); break; case 7: printf(请输入修改后的保质期:n); fflush(stdin); scanf(%d,p1-life); break; default: printf(没有该选项n); return 0; printf(该条药品信息已修改成功,是否存盘?Y/N?n); fflush(stdin); scanf(%c,saveflag); if(saveflag=y|saveflag=Y) WriteToFile(head); else printf(请按任意键返回主菜单n); getch(); break; p1=p1-next; if(flag=0) printf(n没有找到要修改的药品信息,请返回主菜单添加学生信息n); getch(); return(head);ID* DeleteRecord(ID *head) ID *p1,*p2,*p3; char saveflag,temp,s10; int i; p1=p2=p3=head; system(cls); printf(n请输入要删除的药品名称:n); scanf(%s,s); getchar(); while(p3!=NULL) if(strcmp(p3-name,s)=0) i=1; break; if(strcmp(p3-name,s)(p3-next)=NULL) i=0; break; p3=p3-next; if(i=1) while(strcmp(p1-name,s)p1!=NULL) p2=p1; p1=p1-next; if(i=0) printf(对不起,没有找到要删除的药品名单,请检查你要删除的药品名称是否正确n); printf(请按任意键返回主菜单n); getch(); if(i=1)(p1!=NULL) printf(你要删除的药品信息为:n); printf(n编号:%dn名称:%sn类型:%sn价格:%.2lfn数量:%dn生产日期:%d-%d-%dn保质期:%dn,p1-no,p1-name,p1-style,p1-price,p1-num,p1-date1.year,p1-date1.month,p1-date1.day,p1-life); printf(请确定是否要删除该记录?Y/N?n); scanf(%c,saveflag); getchar(); if(saveflag=y|saveflag=Y) if(p1=head) head=p1-next; else p2-next=p1-next; free(p1); printf(该条药品信息已删除成功,是否存盘?Y/N?n); scanf(%c,temp); getchar(); if(temp=y|temp=Y) WriteToFile(head); else printf(请在退出系统之前返回主菜单按3进行保存n); printf(请按任意键返回主菜单n); getch(); else printf(该条药品信息没有被删除 n); printf(请按任意键返回主菜单n); getch(); return head;void Query(ID* head) int num; int a; int count=1; ID *p; int flag,searchflag=1; char ch10; char temp; printf(n1.编号n); printf(n2.名称n); printf(n3.类型n); printf(n4.返回主菜单n); printf(n请输入查询方式的序号:); scanf(%d,num); getchar(); switch(num) case 1: while(searchflag) flag=0; p=head; printf(n请输入查找药品的编号: n); scanf(%d,a); getchar(); while(p!=NULL) if(p-no=a) printf(n编号:%dn名称:%sn类型:%sn价格:%.2lfn数量:%dn生产日期:%d-%d-%dn保质期:%dn,p-no,p-name,p-style,p-price,p-num,p-date1.year,p-date1.month,p-date1.day,p-life); flag=1; p=p-next; if(flag=0) printf(n对不起,未能找到符合条件的记录n); printf(n查找完毕,是否继续查找? Y/Nn); scanf(%c,temp); getchar(); if(temp=y|temp=Y) searchflag=1; else searchflag=0; system(cls); break; case 2: while(searchflag) flag=0; printf(n请输入查找药品的名称: n); scanf(%s,ch); getchar(); p=head; while(p!=NULL) if(strcmp(p-name,ch)=0) printf(n编号:%dn名称:%sn类型:%sn价格:%.2lfn数量:%dn生产日期:%d-%d-%dn保质期:%dn,p-no,p-name,p-style,p-price,p-num,p-date1.year,p-date1.month,p-date1.day,p-life); flag=1; p=p-next; if(flag=0) printf(n对不起,未能找到符合条件的记录n); printf(n查找完毕,是否继续查找? Y/Nn); scanf(%c,temp); getchar(); if(temp=y|temp=Y) searchflag=1; else searchflag=0; system(cls); break; case 3: while(searchflag) flag=0;

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论