1、课程设计说明书(论文) 题 目 小型超市商品销售管理系统 课 程 名 称 面向对象程序设计 院(系、部、中心) 专 业 班 级 学 生 姓 名 学 号 设 计 地 点 指 导 教 师
2、 目 录 课程设计任务书 2 1 功能描述 7 2 概要设计 7 2.1 类的设计 7 2.2 流程图 8 3 详细设计 11 4 效果及存在问题 23 4.1 效果截屏 23 4.2 存在问题 27 5 心得体会 28 6 参考文献 28 课程设计任务书 课 程 名 称 面向对象程序设计 院(系、部、中心) 专 业 班 级
3、 起 止 日 期 指 导 教 师 1.课程设计应达到的目的 通过课程设计加深理解课堂教学内容,熟练掌握C++语言的基本知识和技能;掌握面向对象程序设计的基本思路和方法;掌握指针、类的封装与继承、文件的打开和保存、链表应用;利用所学的基本知识和技能,解决面向对象程序设计问题。培养分析、解决问题的能力;提高学生的科技论文写作能力。 2.课程设计题目及要求 题目:小型超市商品销售管理系统 要求: 某小型超市销售的商品有四类:食品
4、化妆品、生活用品和饮料。每类商品都有商品名和商品利润。每类商品还有区别于其他类的特殊信息,例如食品有批发商,化妆品有品牌,饮料有生产厂家。本系统完成如下功能: (1) 输入商品的基本信息。 (2) 根据商品名查询某个商品的情况。 (3) 计算并显示商品的利润。 3.课程设计任务及工作量的要求〔包括课程设计计算说明书、图纸、实物样品等要求〕 (1)分析系统中的各个实体之间的关系及其属性和行为。 (2)根据问题描述,设计系统的类层次,完成类层次中各个类的描述(包括属性和方法),完成类中各个成员函数的定义。 (3
5、完成系统的应用模块,进行功能调试。 (4)系统设计要实用,编程简练,功能全面。程序中要有异常处理。 (5)界面设计要以用户为中心,操作方便、美观大方。(要有选择性提示) (6)按照课程设计说明书的格式规范撰写课程设计说明书,其中正文包括: ① 功能描述:对系统要实现的功能进行简明扼要的描述。 ② 概要设计:根据功能描述,建立系统的体系结构,即将整个系统分解成若干子功能模块,并用框图表示各功能模块之间的衔接关系,并简要说明各模块的功能。 ③ 详细设计:详细说明各功能模块的实现过程,所用到的类的层次图(包括类成员列表)、算法、技巧等。 ④ 效果及存在问题:说明系统的运行效果(附上运
6、行界面图片)、存在哪些不足以及预期的解决办法。 ⑤ 心得体会:谈谈自己在课程设计过程中的心得体会。 (7)课程设计说明书用A4纸统一打印,装订按学校的统一要求完成。 (8)课程设计的程序以软盘形式上交,文件夹名称为学生姓名及学号的组合。未经指导教师许可或无故不到者,缺勤率达50%的学生不能参加答辩。 答辩时,设计者在5分钟内阐述自己的设计过程和最终结果,突出设计中遇到的主要问题和解决方法,然后回答教师提问。每位学生答辩总时间一般不超过15分钟。 4.主要参考文献 [1] 谭浩强. C++程序设计[M] . 北京:清华大学出版社,2004. [2] 吴乃陵.C++程序设计实践教程[
7、M].北京: 高等教育出版社,2003. [3] 谭浩强. C++程序设计题解与上机指导[M]. 北京:清华大学出版社,1999. [4] 廖雷,罗代忠. C语言程序设计基础实验教程. 北京:高等教育出版社,2005. 5.课程设计进度安排 起 止 日 期 工 作 内 容 12 月22日 12月23 日 12月24 日 12月25 日 12月26 日 12月27 日 12月28 日 熟悉任务,算法设计 软件设计 软件设计 软件调试 软件调试 软件联合调试 考核 6.成绩考核办法 课程设计成绩的评定:根据设计的完成情况、程序的编制质量、
8、独立设计能力以及答辩情况综合衡量,由答辩小组讨论决定。原则上按以下公式计算: 课程设计成绩=工作表现×30%+设计成果×40%+考核测评×30% 工作表现:独立工作能力及设计过程的表现。占总成绩的30%。 设计成果:设计说明书(计算书、论文)、图纸、程序、作品等的质量。占总成绩的40%。 考核测评:课程设计结束前,指导教师应采用考试或答辩等形式对所指导的学生进行测评。测评成绩占总成绩的30%。有创新的同学根据具体情况适当加分。 教研室审查意见: 教研室主任签字:
9、 年 月 日 院(系、部、中心)意见: 主管领导签字: 年 月 日 一. 功能描述 某小型公司,主要有四类人员:经理、兼职技术人员、销售经理和兼职推销员。现在,需要存储这些人员的姓名、编号、级别、当月薪水,计算月薪总额并显示全部信息。 要求: (1)其中,人员编号在生成人员信息时同时生成,每输入一个人员信息编号顺序加1。 (2)程序对所有人员有提升级别的功能 (3)月薪的计算方法是:经理拿
10、固定月薪,兼职技术人员按工作小时数领取月薪,兼职推销员的报酬按该推销员当月销售额提成 ,销售经理既拿固定月薪也领取销售提成。 (4)能按姓名或者编号显示、查找、增加、删除和保存各类人员的信息 。 二. 概要设计 2.1 类的设计 2.2 流程图 (1)主函数流程图 (2)添加函数(左图)和删除函数(右图)的流程图 (3)查询函数流程图 三. 详细设计 1.
11、主函数设计
#include
12、 <<"\t\t* *\n" <<"\t\t* 欢迎使用小型超市商品销售管理系统(HYY) *\n" <<"\t\t* *\n" <<"\t\t* Desined by 韩永扬 206050529 *\n" <<"\t\t* *\n" <<"\t\t* (按任意键进入)
13、 *\n"
<<"\t\t* *\n"
<<"\t\t* *\n"
<<"\t\t********************************************\n"< 14、hoice;
int x;
cout<<"\n\n\t\t\t\t主菜单"<<"\n\n\t\t\t\t(1)添加商品品种\n" <<"\n\t\t\t\t(2)查询商品\n"
<<"\n\t\t\t\t(3)删除商品"<<"\n\n\t\t\t\t(4)退出"<<"\n\n\n请选择:";
cin>>x;
switch(x)
{ case 1:
{system("cls");
cout<<"\n\n\n\n\n\n\t\t请选择添加哪一类:"<<"\n\n\t\t\t\t(1)食品类"<<"\n\t\t\t\t(2)化妆品类"<<"\n\t 15、\t\t\t(3)饮料类"<<"\n\t\t\t\t(4)生活用品类"<<"\n\t\t\t\t(5)返回"< 16、 system("cls");
d.addd();
break;
case 4:
system("cls");
l.addl();
break;
case 5:
system("cls");
break;
}
break;
}
case 2:
17、 {system("cls");
cout<<"\n\n\n\n\n\n\t\t请选择查询哪一类:"<<"\n\n\t\t\t\t(1)食品类"<<"\n\t\t\t\t(2)化妆品类"<<"\n\t\t\t\t(3)饮料类"<<"\n\t\t\t\t(4)生活用品类"<<"\n\t\t\t\t(5)返回"< 18、reak;
case 2:
system("cls");
m.searchm();
break;
case 3:
system("cls");
d.searchd();
break;
case 4:
system("cls");
l.searchl();
break;
19、 case 5:
system("cls");
break;
}
break;
}
case 3:
{system("cls");
cout<<"\n\n\n\n\n\n\t\t请选择删除哪一类:"<<"\n\n\t\t\t\t(1)食品类"<<"\n\t\t\t\t(2)化妆品类"<<"\n\t\t\t\t(3)饮料类"<<"\n\t\t\t\t(4)生活用品类"<<"\n\t\t\t\t(5)返回"< 20、 cin>>choice;
switch(choice)
{ case 1:
system("cls");
f.removef();
break;
case 2:
system("cls");
m.removem();
break;
case 3:
system("cls");
d.removed();
21、
break;
case 4:
system("cls");
l.removel();
break;
case 5:
system("cls");
break;
}
break;
}
case 4:
{system("cls");
cout<<"\n\n\n\n\n\n\t\t\t\t谢 22、谢使用!"<<"\n\n\t\t\t\t再见!\n";
exit(1);
}
break;
default:
{cout<<"输入有误,请重选!";
goto A;
}
}
}
}
上面即为主函数,通过switch语句来选择操作:添加,查询,删除,退出。在每项操作中又用switch语句来选择对哪一类商品进行操作,分别有食品,化妆品,饮料,生活用品四类。该函数没有把“显示商品利润”作为一项单独操作,而是把该功能加进了“查询”操作中,查询的同时直接显示商品利润。
2. 商品基类设计
cla 23、ss spbase
{public:
int t;
float oprice;
float iprice;
float prof;
int quantity;
char name[10];
void getdate();
void showdate();
void add();
void search();
void remove();
int gett(){return t;};
};
void spbase::getdate() 24、 //输入函数的设计
{ cout<<"\n\t\t请输入商品名称:";
cin>>name;
cout<<"\n\t\t请输入商品售价:";
cin>>oprice;
cout<<"\n\t\t请输入商品进价:";
cin>>iprice;
cout<<"\n\t\t请输入商品库存量:";
cin>>quantity;
}
void spbase::showdate() //输出函数的设计
{ cout<<"\n\n商品基本信息如下:";
cout<<"\n\n\t\t商品名称:";
25、cout< 26、le("HYY.txt",ios::out|ios::ate);
if(!file)
{cout<<"文件打开失败!";
getch();
exit(1);
}
spbase p1;
p1.getdate();
file.write(reinterpret_cast 27、/查询函数的设计
{
char name4[10];
cout<<"\n请输入生活用品名称:";
cin>>name4;
fstream file("HYY.txt",ios::in);
if (!file)
{cout<<"文件打开失败!";
getch();
exit(1);
}
char flag='a'; //设标志位
spbase p1;
file.read(reinterpret_cast 28、f(spbase));
while(!file.eof()) //正确显示,指针还没到末尾继续
{ if((strcmp(p1.name,name4)==0)&&gett())
{p1.showdate();
getch();
flag='z';
break;
}
file.read(reinterpret_cast 29、");
getch();
}
file.close();
}
void spbase::remove() //删除函数的设计
{ t=0;search();}
3. 食品类设计(food)
class food:public spbase
{ private:
char pfs[10];
public:
void getdatef()
{ spbase::getdate();
cout<<"\n\t\t请输入商品批发商:";
cin>>p 30、fs;
}
void showdatef()
{ spbase::showdate();
cout<<"\n\n\t\t商品批发商:";
cout< 31、
food f;
f.getdatef();
file.write(reinterpret_cast 32、);
if (!file)
{cout<<"文件打开失败!";
getch();
exit(1);
}
char flag='a';
food f;
file.read(reinterpret_cast 33、howdatef();
getch();
flag='z';
break;
}
file.read(reinterpret_cast 34、ovef()
{ t=0;searchf();}
};
4. 化妆品类设计(makeup)
class makeup:public spbase
{ private:
char pp[10];
public:
void getdatem()
{ spbase::getdate();
cout<<"\n\t\t请输入商品品牌:";
cin>>pp;
}
void showdatem()
{ spbase::showdate();
cou 35、t<<"\n\n\t\t商品品牌:";
cout< 36、te(reinterpret_cast 37、ch();
exit(1);
}
char flag='a';
makeup m;
file.read(reinterpret_cast 38、 break;
}
file.read(reinterpret_cast 39、
class drink:public spbase
{ private:
char factory[10];
public:
void getdated()
{ spbase::getdate();
cout<<"\n\t\t请输入商品生产厂家:";
cin>>factory;
}
void showdated()
{ spbase::showdate();
cout<<"\n\n\t\t商品生产厂家:";
cout< 40、
void addd()
{ t=1;
ofstream file("HYY3.txt",ios::out|ios::ate);
if(!file)
{cout<<"文件打开失败!";
getch();
exit(1);
}
drink d;
d.getdated();
file.write(reinterpret_cast 41、));
file.close();
}
void searchd()
{ char name3[10];
cout<<"\n请输入饮料名称:";
cin>>name3;
fstream file("HYY3.txt",ios::in);
if (!file)
{cout<<"文件打开失败!";
getch();
exit(1);
}
42、 char flag='a';
drink d;
file.read(reinterpret_cast 43、et_cast 44、 getdatel()
{ spbase::getdate();
}
void showdatel()
{ spbase::showdate();
}
void addl()
{ spbase::add();
}
void searchl()
{ spbase::search();}
void removel()
{spbase::remove();}
45、
};
四.效果及存在问题
4.1 效果截屏
进入主界面
按任意键进入主菜单后,选择“1”,添加商品
进入”添加商品品种”的自菜单,选择“3“,添加”饮料类“
写入添加的商品基本信息
返回上一层主菜单后,选“2”,查询商品
选择“3”,查询“饮料类”
输入查询的饮料名称
查询到该商品,基本信息如下:
返回主菜单,选“3”,删除商品
选“3”,删除“饮料类”
46、
写入删除的商品名称
删除后查询显示:
选“4”后,退出
4.2存在问题
“添加商品品种”的操作还存在不完善之处,进入主菜单选了“添加商品品种”的操作,当添加完一种商品后,不能继续添加商品;必须选择“返回”操作返回到主菜单重新选择“添加商品品种”后,才能添加第二种商品,也就是说不能够连续添加。
五.心得体会
经过一周课程设计,熟练的掌握了C++语言的基本知识和技能,可以利用面向对象程序设计的基本思路和方法,利用所学的基本知识和技能,解决面向对象程序设计问题。
47、通过一个学期的Visual C++程序设计的学习,自己感觉吸收了不少新知识。从计算机基础到Visual C++,我感觉充实了很多。经过自己的努力,把程序作完,作好,自己感受到了收获的喜悦,告诉我:一分耕耘一分收获。
一个程序作完不难,关键是调试,修改的过程很难,不过按动F4键可以提示你哪里出错,有时少个分号都不能调试过去。还有一点,一个细心的人作程序可能少走弯路。再次,一般作程序不是从头到尾作完再调试,这样很难调好,因为每编一句都可能出错,这样错误越积越多,最好的方法是每作完一个小段调试一次,按动F4找出其错误,一步一步循序渐进地作完,到最后不至于出了很多错误,不知如何寻找,同样少了 48、很多的麻烦。编程多了,自然地经验多了,调程序就不觉得那么难了。
还有一点,要想编好、快速完成任务,就必须有严谨的科学态度,比如说一个字母,甚至一个标点符号的错误都会导致错误,这种错误在编程中我们经常出现,有时系统能让你很快找出,你能顺利往下进行,但有时它提示的错误信息和标点一点关系都没有,而后你把编的程序从头到尾看了一遍,结果花了大量的时间,大大降低了效率。其它的粗心大意错误更是五花八门,调试起来就更加困难了,所以在编程时一定要心细。
还有就是要有耐心,因为编程是件很繁琐的工作,如果没有耐心恐怕是编不下去的,比如有的人,有好几处错误,就放弃了,结果一事无成。
最后一点,就是编程时思路一定 49、要清楚。因为编程本身就是一个严密的逻辑过程,实现每一步的操作需要那些命令,哪些条件都是清清楚楚,明明了了的,来不得半点遗漏。
总的来说,编程是件复杂的脑力劳动,要有科学严谨的科学态度,细心的习惯和耐心才能作好,要做到以上的要求我们还要做许多许多。
也就是从现在我更深刻体会到学海无涯,我要用正确的态度面对学习的挑战,理论联系实际,进一步熟练掌握科学知识,武装自己的头脑,为将来走向社会打下坚实的基础。”
六.参考文献
[1] 谭浩强. C++程序设计[M] . 北京:清华大学出版社,2004.
[2] 吴乃陵.C++程序设计实践教程[M].北京: 高等教育出版社,2003.
[3] 谭浩强. C++程序设计题解与上机指导[M]. 北京:清华大学出版社,1999.
[4] 廖雷,罗代忠. C语言程序设计基础实验教程. 北京:高等教育出版社,2005.






