资源描述
辽 宁 工 业 大 学
《C++语言程序设计》课程设计(论文)
题目: 药品信息管理系统
院(系): 软 件 学 院
专业班级:
学 号:
学生姓名:
指导教师: 翟宝峰
教师职称: 副教授
起止时间:2014.12.22-2015.1.2
课程设计(论文)任务及评语
院(系):软件学院 教研室:软件教研室
学 号
学生姓名
专业班级
课程设计(论文)题目
药品信息管理系统
课程设计(论文)任务
程序设计的任务与要求:
(1). 掌握面向对象程序设计语言C++的基本语法
(2). 掌握C++面向对象设计的思想
(3). 掌握VC++6.0与DEV C++ 开发工具的使用
(4). 运用标准C++规范设计应用程序
设计过程中,要严格遵守设计的时间安排,听从指导教师的指导。正确地完成上述内容,规范完整地撰写出设计报告。
指导教师评语及成绩
成绩: 指导教师签字:
2015年 1 月 4日
辽 宁 工 业 大 学 课 程 设 计 说 明 书(论 文)
目 录
第1章 课程设计目的与要求 1
1.1设计目的 1
1.2实验环境 1
1.3预备知识 1
1.4设计要求 1
第2章 课程设计内容 2
2.1 课题描述 2
2.2 系统设计 2
2.2.1功能分析 2
2.2.2面向对象设计 2
2.2.2类成员描述 4
2.3程序实现 5
2.3.1源码分析 5
2.3.2运行结果 13
第3章 总结 15
参考文献 16
第1章 课程设计目的与要求
1.1设计目的
将理论教学中涉及到的知识点贯穿起来,对不同的数据类型、程序控制结构、数据结构作一比较和总结,结合设计题目进行综合性应用,对所学知识达到融会贯通的程度。
通过课程设计,学生在下述各方面的能力应该得到锻炼:
(1)进一步巩固、加深学生所学专业课程《C++语言教程》的基本理论知识,理论联系实际,进一步培养学生综合分析问题,解决问题的能力。
(2)全面考核学生所掌握的基本理论知识及其实际业务能力,从而达到提高学生素质的最终目的。
(3)利用所学知识,开发小型应用系统,掌握运用C++语言编写调试应用系统程序,训练独立开发应用系统,进行数据处理的综合能力。
(4)对于给定的设计题目,如何进行分析,理清思路,并给出相应的数学模型。
(5)掌握面向对象程序设计的方法。
(6)熟练掌握C++语言的基本语法,灵活运用各种数据类型。
(7)进一步掌握在集成环境下如何调试程序和修改程序。
1.2实验环境
硬件要求能运行Windows 操作系统的微机系统。C++语言应用程序开发软件使用:VC++ 系统,或其他C++语言应用程序开发软件。
1.3预备知识
熟悉C++语言程序设计的基本知识及VC++编辑器的使用方法。
1.4设计要求
1.仔细分析设计题目,画出程序流程图,编写程序源代码。
2.积极上机调试源程序,增强编程技巧与调程能力。
3.认真书写课程设计预习报告,课程设计说明书。
4.遵守课程设计要求和机房管理制度,服从指导教师的安排,确保课程设计的顺利完成课程设计内容。
第2章 课程设计内容
2.1 课题描述
在我国,随着医药卫生体制改革的深入,医药连锁经营的推行以及日趋激烈的商业角逐,越来越多的医药经营企业意识到提高企业管理水平的重要性,也迫切要求加快管理信息化的进程。
在医药行业中,医药经营企业的物流管理以及相应的财务处理、信息处理,长期以来一直采用手工操作,但随着产业结构调整、全新的市场竞争环境,药品企业管理和运营效率已经成为企业成败的关键所在,手工方式的弊端毕现无遗。这就要求医药管理摆脱过去人手操作的烦琐,充分满足了医药经营企业的各种需求,从医药经营企业的各个环节对人流、物流、资金流、信息流进行统一系统的管理。市场的需求和技术的支持,最终会导致越来越多的优秀医药管理软件的出现,并在竞争中得到不断的完善和优化。
本系统以C++语言实现了药品信息管理的:库存管理、药品管理以及出库入库管理。
2.2 系统设计
2.2.1功能分析
这是一个关于小刚药品信息管理系统,具有输入、显示、修改、查询、删除数据等功能,用户使用时,进入主菜单选择界面,选择想要进行的操作;
1.输入信息,输入数字“1”,增加药品信息
2.显示所有药品信息,输入数字“2”,将所有的药品信息以列表输出
3.查找药品信息,输入“3”,回车确定操作,输入要修改的ID号
4.修改药品信息,输入“4”回车确定操作,系统显示修改的页面,将需修改的药品息输入,输入完后回车确定
5.删除药品信息,输入“5”,回车确定操作,系统显示“输入删除药品的ID号,输入要删除的药品号,系统将保存的数据删除
6.退出系统,输入“0”,回车确定操作,退出系统。
2.2.2面向对象设计
类设计:使用面向对象的程序设计进行分析,整个系统涉及两大类可操作,仓库、药品。所以系统主要涉及两大类:药品仓库类、药品类。
系统框架就是仓库类和药品类的定义;主函数中定义一个仓库对象,循环显示主菜单并根据用户选择调用仓库类的相应方法(成员函数)。
考虑系统操作的药品信息具有不确定性,所以考虑使用链表保存、处理药品信息。仓库类包含:所有药品信息的一个不带头结点的链表及可以对药品信息进行增,改,删除,查询,数量设置,数据存盘等操作的相关模块为成员函数。所有药品都具有的公共信息及操作可以使用仓库类进行描述。
图2.1系统中uml类图之间的关系
小刚药品信息管理系统
增加药品信息
查看药品信息
退出系统
药品信息
药品分类信息
按名称查询
按类别查询
增加药品库存信
修改药品信息
直接退出
增加、删除药品信息
图2.2总体流程图
2.2.2类成员描述
a.药品管理员类:
class admin
{
public:
admin();
private:
string name;
};
b.药品仓库货架类:
class shelf
{
public:
shelf();
private:
admin men;//管理员
string storeNo;//药品仓库编号
string kinds;//药品大类
string shelfNo;//药品货架号
};
函数成员描述以及函数功能:
1、void input()通过函数输入药品信息
2、void output()通过函数输出药品信息
3、Node()通过函数使指针指向下个地址
4、List()通过函数使指针指向首地址
5、void addNode()通过函数添加药品信息
6、void XSNode()通过函数显示药品所有信息
7、void queryNode1(char *TName)通过函数查询药品信息
8、void queryNode2(char *TName)同上
9、void delNode(char *TName)通过函数删除药品信息
10、void saveList()通过函数储存药品信息
11、ofs.open("data.txt");通过函数输出文本文件
12、ifs.open("data.txt");通过函数输入文本文件
13、~List()通数过定义析构函数,释放空间
2.3程序实现
2.3.1源码分析
#include<stdio.h>
#include<stdlib.h>
#include<conio.h>
void input(); /*输入*/
void display(); /*显示*/
void search(); /*查找*/
void amend(); /*修改*/
void delete_slf(); /*删除*/
void list(); /*菜单*/
struct stud /*定义药品属性数组*/
{
long num; /*药品编号*/
char name[20]; /*药品名字*/
float price; /*药品的价格*/
int godsnum; /*药品的数量*/
}infom;
class SP/*定义个药品类*/
void input() /*输入信息函数*/
{
FILE *fp; /*定义文件指针*/
char numstr[20],ch;
if((fp=fopen("c:\\123.dat","wb"))==NULL)
{
exit(0);
}
do
{
getchar();
printf("\n\t\tenter num:");
gets(numstr);
/*接受字符并存入数组中*/
infom.num=atol(numstr);
/*把字符型转换成整型*/
printf("\n\t\tenter name:");
gets(infom.name);
printf("\n\t\tenter price:");
gets(numstr);
infom.price=atof(numstr);
/*把字符型转换成float型*/
printf("\n\t\tenter godsnum:");
gets(numstr);
infom.godsnum=atoi(numstr);
/*把字符型转换成整型*/
fwrite(&infom,sizeof(infom),1,fp);
printf("\n\t\tinput continue(y/n)?");
ch=getchar();getchar();
}while(ch=='Y'||ch=='y');
fclose(fp);
}
void display() /*显示信息函数*/
{
FILE *fp;
char ch;
int x;
float f;
if((fp=fopen("c:\\123.dat","rb"))==NULL)
{
printf("\nCannt open file!\n");
getch();
exit(1);
}
while(fread(&infom,sizeof(struct stud),1,fp)==1)
{
printf("\n\tnum:%ld",infom.num);
printf("\n\tname:%s",infom.name);
printf("\n\t\price:%.3f",infom.price);
printf("\n\t\godsnum:%d",infom.godsnum);
}
fclose(fp);
}
void search() /*查询信息函数*/
{
FILE *fp;
int x;
long y;
char ch;
if((fp=fopen("c:\\123.dat","rb"))==NULL)
{
printf("\nCannot open file!\n");
getch();
exit(1);
}
do
{
printf("\nplease input recond num:");
scanf("%d",&x);
y=(x-1)*sizeof(infom);
rewind(fp); /*把指针移回文件开始*/
if(fseek(fp,y,0)!=0)/*把指针指向Y*/
{
printf("can not move there!\n");
exit(1);
}
fread(&infom,sizeof(infom),1,fp);
printf("num:%ld\n",infom.num);
printf("name:%s\n",infom.name);
printf("price:%f\n",infom.price);
printf("godsnum:%d",infom.godsnum);
ch=getchar();getchar();
}while(ch=='Y'||ch=='y');
fclose(fp);
}
Class KF /*定义一个药品库房类 */
void amend() /*修改信息函数*/
{
FILE *fp1 ,*fp2;
int flag;
long ch;
char f;
char temp[10];
do
{
if((fp1=fopen("c:\\123.dat ","rb")) ==NULL)
{
printf("\tCan not open the inform file!");
getch();
exit(1);
}
if((fp2=fopen("c:\\456.dat","wb")) == NULL)
{
printf("\tCan not open the temp file!");
getch();
exit(1);
}
printf("please input the num you want to amend:");
getchar();
scanf("%ld",&ch);
flag=0;
while(fread(&infom,sizeof(infom),1,fp1)==1)
{
if(ch==infom.num)
{
printf("\n\nPlease input the new information:\n");
printf("\tnum:");getchar();gets(temp);
infom.num=atol(temp);
printf("\tname:");
gets(infom.name);
printf("\tprice:");
gets(temp);
infom.price=atof(temp)
printf("\tgodsnum:");
gets(temp);
infom.godsnum=atoi(temp);
getchar();
flag=1;
}
fwrite(&infom,sizeof(infom),1,fp2);
}
fclose(fp1);
fclose(fp2);
if(flag == 1)
{
printf("amend success!\n");
remove("c:\\123.dat");
rename("c:\\456.dat","c:\\123.dat");
}
else
printf("Can not find this record!\n");
printf("amend any more ?(Y/N): [ ]\b\b");
f=getchar();
getchar();
}while (f=='Y'||f=='y');
}
void delete_slf()
/*删除信息函数*/
{
FILE * fp1,* fp2;
int flag=0;
/*定义一个标记*/
long ch;
char f;
char temp[10];
do
{
if((fp1=fopen("c:\\123.dat","rb"))==NULL)
{
printf("\tCan not open the inform file!");
getch();
exit(1);
}
if((fp2=fopen("c:\\456.dat","wb"))==NULL)
{
printf("\tCan not creat the temp file!");
getch();
exit(1);
}
printf("Please input the num you want to delete:");
getchar();
scanf("%ld",&ch);
while(fread(&infom,sizeof(infom),1,fp1)==1)
{
if(ch==infom.num)
{
flag=1;
}
else
fwrite(&infom,sizeof(infom),1,fp2);
/*分配一段内存空间&infom是首地址*/
}
fclose(fp1);
fclose(fp2);
if(flag==1)
{
printf("Delete success!\n");
remove("c:\\123.dat");
/*删除文件123*/
rename("c:\\456.dat","c:\\123.dat");
/*对文件456重命名*/
else
printf("Can not find this record!\n");
printf("Delete any more?(Y/N):[ ]\b\b");
f=getchar();
getchar();
}while(f=='Y'||f=='y');
}
void list()
/*选择功能函数*/
{
int x;
while(1)
{
system("cls");
printf("\t\t /\~~~~~~~~~~~~~\ ▓ ^*^ ☆ $$ .☆\n");/*软件界面*/
printf("\t\t ./ \~~~▓~ ~~~~\ ◆ ☆感谢使用小刚药品信息管理系统☆ \n");
printf("\t\t / ^^ \ ══════\.◆ 工作人员 \n");
printf("\t\t ..▎[] ▎田 田 ▎ |┃◆ ★ 姓名:王宏刚 \n");
printf("\t\t &&▎ ▎ ▎'|'▎ @ ★ 学号:141305055 \n");
printf("\t\t# ■■■■■■■■■■〓▄▃▂▁★ 辽宁工业大学软件学院 ︸|| \n");
printf("\t\t',你说过会同我一起使用!','╱╱★╱☆\n");
printf("\t\t╭⌒','╭ ⌒╮ ╱ ╱╱ ╱ ☆ ╱★╱\n");
printf("\t\t ',' ',' ',' ','☆ ╱★ ╱╱ \n");
printf("\t\t\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\n");
printf("\t\t\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\n");
printf("\t\t\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\n\n");
printf("\t\t 请选择功能: \n");
printf("\t\t******* ╭☆☆˙ We1come. *******\n");
printf("\t\t*******┊╭⌒ ╭⌒╮1.输 入 药品 信 息*******\n");
printf("\t\t*******┊ ︶ ︶︶ *******\n");
printf("\t\t*******┊╭⌒ ╭⌒╮ ◣◤ *******\n");
printf("\t\t*******┊ ︶ ︶︶ ◢◥ *******\n");
printf("\t\t*******┊╭⌒ ╭⌒╮2.显 示 药品 信 息*******\n");
printf("\t\t*******┊ ︶ ︶︶ *******\n");
printf("\t\t*******┊╭⌒ ╭⌒╮ (▔◎▔) *******\n");
printf("\t\t*******┊ ︶ ︶︶ ╱│││╲ *******\n");
printf("\t\t*******┊╭⌒ ╭⌒╮3.查 找 药品 信 息*******\n");
printf("\t\t*******┊ ︶ ︶︶ *******\n");
printf("\t\t*******┊╭⌒ ╭⌒╮ ╭⌒⌒のˊ *******\n");
printf("\t\t*******┊ ︶ ︶︶ ( . .)ˋ *******\n");
printf("\t\t*******┊╭⌒ ╭⌒╮4.修 改 药品 信 息*******\n");
printf("\t\t*******┊ ︶ ︶︶ *******\n");
printf("\t\t*******┊╭⌒ ╭⌒╮ ╱╲╲ *******\n");
printf("\t\t*******┊ ︶ ︶︶ ╲╲╱ *******\n");
printf("\t\t*******┊╭⌒ ╭⌒╮5.删 除 药品 信 息*******\n");
printf("\t\t*******┊ ︶ ︶︶ *******\n");
printf("\t\t*******┊╭⌒ ╭⌒╮ ∴°★.☆° *******\n");
printf("\t\t*******┊ ︶ ︶︶ .°∴°★ *******\n");
printf("\t\t*******┊╭⌒ ╭⌒╮0.退 出 管理 程 序*******\n");
printf("\t\t******* ┊ ︶ ︶︶ *******\n");
printf("\t\t\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\n");
printf("\t\t\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\n");
printf("请 选 择 功 能:");
scanf("%d",&x);
if(x>=0&&x<=5) /*功能选择函数*/
{
switch(x)
{
case 1:input();
break;
case 2:display();
break;
case 3:search();
break;
case 4:amend();
break;
case 5:delete_slf();
break;
case 0:exit(0);
}
printf("\n\nsuccess. \nPress any key to continue......\n");getch();
}
else
printf("\n\nfail.choose again\n\n");
}
}
void main() /*主函数*/
{
printf("\n\n\n\n\n\n\n\n\n\n");
list();
}
2.3.2运行结果
程序调试正确无误后,进入使用后,出现界面则为正确呈现形式,在界面上输入需要功能模块的的代码,将显示所需的界面,如下系列图所示
1. 系统首页如图:
图2.3
2. 程序输入时的界面图如下图
图2.4
3. 药品信息显示如图:
图2.6
第3章 总结
通过本次C++课程设计,收获还是很多的,从刚刚拿到课程设计题目后,我就先分析这个程序的一些基本的功能,从这些基本功能出发来定下一个程序的大致框架结构,这里面主要包括程序中所设计的类,类与类之间的继承关系以及一些主要的函数的设计思想。比如:删除记录函数、增加记录函数等等。从一开始我就从图书馆借阅了不少的其他相关的c++资料,这些都是很宝贵的参看资料,可以说给我最后顺利的完成程序的编写打下了很扎实的基础
这次的课程设计,是自己独立完成了一个相对比较大的程序,里面用到的面向对象的知识也是比较多的,通过一番实践,很好的总结、强化了之前学习过的知识要点,并且也发现了自己还没好好掌握的知识点,对于没掌握的,我查阅了参考书籍及时补上。感觉代码写到也是后来,状态越好,我感觉是由于自己对于一些基本的知识的比较好的掌握了。有些问题虽然没遇到过,但是通过查阅资料,只要了解了它们的用法,自己就可以很快的模仿下来,不是照抄。这一点我觉得在今后的程序设计中也是蛮重要的,因为我发现要写出好程序,首先应该去学习人家的程序,看懂他们的程序并且转化为自己的。其次才有可能去创新。
参考文献
1.郑莉、董渊 编着 《C++语言程序设计》 北京:清华大学出版社
2.黄迪明 主编 《C++语言程序设计基础》 北京:电子工业出版社
3.钱能 主编 《C++程序设计教程》 北京:清华大学出版社
4.钱能 C++程序设计教程 清华大学出版社,1999年
5.吴访升 编着 《C++程序设计》 北京: 机械工业出版社
6.Decoder 主编 《C/C++程序设计》 北京:中国铁道出版社
7.谭浩强 C语言程序设计(第二版)清华大学出版社,2003年
8.吴文虎 程序设计基础 清华大学出版社,2003年
9.钱启平 C语言程序设计基础辅导教程 铁道出版社,2000年
10.徐孝凯 编着 《C++语言程序设计》 北京:清华大学出版社
16
展开阅读全文