c 课程设计报告毕设论文Word下载.docx
《c 课程设计报告毕设论文Word下载.docx》由会员分享,可在线阅读,更多相关《c 课程设计报告毕设论文Word下载.docx(33页珍藏版)》请在冰豆网上搜索。
普通电视机、DVD、带DVD的电视机。
②带DVD的电视机的售价为普通电视机和DVD单价之和的80%。
③要求对所有的库存设备都能按照品名进行显示、查找、增加和删除、保存的功能。
(4)学生选修课系统
①系统以菜单方式工作
②课程信息录入功能(课程信息用文件保存)--输入
③课程信息浏览功能--输出
④查询功能:
(至少一种查询方式)--算法按学分查询按课程性质查询
⑤学生选修课程(可选项)
(5)成绩记录簿
①创建信息链表并以磁盘文件保存;
②读取磁盘文件并显示输出所有学生的成绩;
③按学号或姓名查询成绩;
④添加成绩记录;
⑤修改指定姓名或学号的学生的成绩并可存盘;
⑥显示输出60分以下、60~79、80~89、90分以上各分数段的学生信息。
2、课程设计具体实现
1、仓库管理
(1)总体设计
用例图:
总体设计方案:
首先输入仓库信息接着输入仓库里的物品信息,直接进行合并,并输出合并后的信息,之后选择添加信息或者查询信息。
主要设计原理:
定义两个类,仓库类和物品类,在仓库类里采用动态数组储存物品的方式,在物品类里面重载插入提取运算符,方便输入和输出。
利用重载[]下标运算符来来获得所要查询的物品信息,如果下标越界则抛出异常,下面接受异常。
(2)详细设计
数据录入模块
主要完成功能为:
输入仓库信息,物品信息,合并仓库并输出。
主要使用技术:
重载插入,提取运算符,给指针分配空间。
关键代码如下:
ints;
cout<
<
"
********************************************\n"
;
请输入仓库名字:
cin>
>
Name;
请输入物品种类:
n;
s=cin.rdstate();
//判断输入n的返回流的状态
while(s)
{
cin.clear();
cin.getline(t,80);
cout<
种类非法输入,请重新输入:
cin>
s=cin.rdstate();
}
sum=n;
g=newCGoods[n];
//动态分配空间
for(inti=0;
i<
i++)
g[i];
//重载了插入运算符
for(i=0;
s2.sum;
i++)//两重for循环
flag=1;
for(j=0;
j<
s.sum;
j++)
if(s.g[j].getName()==s2.g[i].getName())//判断两个对象的物品名是否相同
{
flag=0;
s.g[j].setGood(s2.g[i]);
//若相同,让两个数量相加
break;
}
if(flag)
s.g[s.sum++]=s2.g[i];
//若不相同,让物品累加在前面对象的清单里
添加物品信息模块
动态添加到动态数组。
需要再定义一个动态指针数组,并把以前的值付给指针数组之后再添加。
CGoods*gg;
//新定义一个物品类指针
gg=newCGoods[sum+1];
//分配原有物品个数+1大的空间
sum;
gg[i]=g[i];
//把原来的物品类赋值给新开辟的空间
gg[sum++]=gd;
//添加新的物品
delete[]g;
//释放掉原有的空间
g=gg;
//让g指针指向gg
s1.getSum();
i++)
if(go.getName()==s[i+1].getName())//判断物品是否相同
a=0;
s[i+1].setGood(go);
//添加时若物品相同数量相加
break;
if(a)
s.addGood(go);
数据查询模块
主要完成功能:
用for循环来控制查找相同的变量输出,或者直接输出。
名称"
'
\t'
数量"
单价"
endl;
(3)调试及问题解决
主要是动态数组分配空间,刚开始我直接开辟了一个256大的空间,因为不知道物品有多少件所以会形成越界的情况,所以再写一个函数,再定义一个动态指针数组,每次调用开辟新空间,再让以前的数据赋给这个指针数组。
用变量来控制并调试。
2、交通工具选择
顾客人数------>
选择交通工具------>
输出交通类型,根据顾客人数判断抛出异常。
之后再重新选择直至三个交通方式都不是,或者只要有一个可以乘坐结束。
先定义一个抽象类,再定义汽车类,火车类,飞机类继承抽象类,分别实现里面的虚函数,判断是否抛出异常,接受异常并输出。
输入顾客人数,来判断乘坐哪种交通工具
数据输出模块
判断顾客人数是否否和范围,不符合范围抛出异常,接受异常并输出异常。
其中有三个静态变量来控制标记已选过的交通工具。
三个都选过,或者没有异常结束。
使用throw,try,catch三个函数,用基类指针调用子类。
try
请输入你的选项:
a;
intsss;
chartt[20];
sss=cin.rdstate();
//用于控制输入选项的状态
while(sss)
{
cin.clear();
cin.getline(tt,80);
cout<
请重新输入你的选项:
cin>
sss=cin.rdstate();
}
while(a<
1||a>
3)//判断选项是否越界
while(sss)
cin.clear();
cin.getline(tt,80);
cout<
cin>
sss=cin.rdstate();
if(a==1)
v=&
c;
v->
printf();
transport(n);
//抛出异常语句
elseif(a==2)
t;
elseif(a==3)
p;
catch(char*message)//接受异常
{
endl<
message<
system("
pause"
);
if(t.e2==2&
&
c.e1==1&
p.e3==3)//用来判断是否全选过一边
system("
cls"
//清屏
三种交通工具都超载!
!
请另想办法吧!
return;
by(n);
//调用重新选则交通工具函数
主要问题就是判断选项的输入是否越界等。
后来查书发现可以控制的语句。
控制不了若三种都不行怎么办,最后设置了三个静态变量来控制。
3、公司库存管理系统
主页面------>
菜单------>
显示包括录入和输出。
由于有三个物品类型所以要分别输入,之后的查询,删除等方式都要分情况选择。
实行完这些模块后会选择返回主页面和结束程序。
注意:
输入时第三种物品是前两种的价钱80%,所以要加以判断。
注意对应文件对应的对象,查询要从文件读数据,删除还要再写进去。
注意继承,由于函数相同所以要判断,其中还有静态变量来控制每个类型的物品数,用来之后的删除。
登陆模块
当用户开始使用本系统,进入登陆模块。
屏幕显示提示,用户可根据需要选择相应功能。
具体如下:
1、进入菜单2、结束程序。
用户可根据需要选择相应功能。
进入菜单之后又会出现登录模块,1、存入物品2、显示库存3、查找物品4、增加物品5、删除物品6、返回主页面,根据自己的意愿选择相应的功能。
清屏实现页面的转换,控制选项的越界和状态。
system("
***********************欢迎进入公司库存管理系统!
***********************"
**"
*1.存入物品*"
*2.显示库存*"
*3.查找物品*"
*4.增加物品*"
*5.删除物品*"
*6.返回主页面*"
************************************************************************"
cin>
n=pand(n);
//自己定义的判断选项状态的函数
刚进入就分四个选项,三个是要输入的种类,还有一个是返回主页面。
把信息分别录入不同种类的不同文件中,其中物品品名已经规定直接输入选项。
文件的写入,还有一些数据控制同上。
rrrface();
//物品品名显示菜单
请按照品名(1~6以外结束)单价输入,例:
(TV,DVD)1216555,(TVDVD)1222"
while
(1)//用选项来代替课程性质,但最后写入文件类型是string类
请输入物品:
type;
type=pand(type);
if(type<
1||type>
6)
if(type==1)
out<
先科"
elseif(type==2)
先锋"
elseif(type==3)
谷天"
elseif(type==4)
索尼"
elseif(type==5)
飞利浦"
else
万利达"
price>
num;
查询、删除、添加模块
查询,删除,添加对应信息的物品,物品品名可用选项代替,删除后要把删除后的代码重新读入文件中。
文件的读和写。
查询:
while(in>
t>
p>
n)
if(t1==t&
p==p1)//查询必须品名和单价相等
所查询的TV有:
品名:
t<
单价:
p<
数量:
n<
in.close();
删除:
while(in>
{
if(t!
=t1||p!
=p1)
eee"
tt[i]=t;
pp[i]=p;
nn[i]=n;
i++;
sum1--;
ofstreamout("
TVGoods.txt"
if(!
out)
judge();
for(intj=0;
i;
j++)//最后重新写入文件
out<
tt[j]<
'
pp[j]<
nn[j]<
添加:
while
(1)
请添加输入物品:
type=pand(type);
if(type<
0||type>
break;
if(type==1)
out<
elseif(type==2)
elseif(type==3)
elseif(type==4)
elseif(type==5)
else
price;
删除时会系统会崩,原因是下表越界,由于程序太长,所以采用断点调试的方法查找错误。
还有就是控制输入格式。
4、学生选修课系统
录入,输出,查询,学生选修,分别实现各个模块。
学生选修课程要先分学生登陆,注册。
登陆之后再进行选课或者查询选课纪录,之后再有两个选项返回主页面,和结束程序。
注意对应文件对应的对象,查询要从文件读数据。
学生选修课记录课程需要学生登录,注册。
注册密码需要把密码学生信息写到一个文件里,登录时需要从中读出相应学生密码并比较。
之后进入后可以选课或者已经选过课直接查看选课记录。
进入菜单之后又会出现登录模块,1、录入课程信息2、输出课程信息3、按学分查询4、按课程性质查询5、学生选修课程。
根据用户的身份选则不同的选项。
进入学生选修课程后会有1、登陆2、注册3、返回页面。
*********************欢迎进入学生选修课程系统!
*************************"
*1.录入课程信息*"
*2.输出课程信息*"
*3.查询课程信息--学分*"
*4.查询课程信息--课程性质*"
*5.学生选修课程*"
数据录入和输出模块:
把输入的数据写入文件里面,把从文件里面的数据读出来。
课程性质用选项来代替。
录入:
cout<
课程(编号以xxx结束):
id;
if(id=="
xxx"
)
title>
nature>
period>
teachperiod[0]>
credit>
term;
teachperiod[1]=period-teachperiod[0];
while(nature>
5||nature<
1)
课程性质不存在,请重新输入!
id>
teachperiod[1]=period-teachperiod[0];
while(credit>
4||credit<
课程学分越界,请重新输入!
id<
title<
if(nature==1)
社会"
elseif(nature==2)
技术"
elseif(nature==3)
跨科"
elseif(nature==4)
数学"
elseif(nature==5)
文明"
period<
teachperiod[0]<
teachperiod[1]<
credit<
term<
输出:
in.unsetf(ios:
:
skipws);
while(!
in.eof())//用字符一个一个读出来
in>
ch;
if(ch=='
学生选修课模块
注册,登录,选课和查询选课记录。
隐藏密码,文件读写。
注册:
***********************欢迎注册!
************************"
请输入学号:
请输入姓名:
name;
请输入密码:
6;
passage[i];
passage[6]='
\0'
***********************注册成功!
ofstreamout1("
student.txt"
ios:
app);
out1<
num<
name<
passage<
out1.close();
登录:
passage[i]=getch();
//隐藏密码
putchar('
*'
//用*代替输入
while(inn>
n3>
na3)
inn>
i1>
n1>
p1>
t1>
t2>
c1>
te;
if(n3==num&
na3==name)
cout<
i1<
\t"
n1<
p1<
t1<
t2<
c1<
te<
inn.close();
查询模块
查找相应的物品信息
***************学分类型*****************"
1.1分2.2分3.3分4.4分"
****************************************"
请输入选项:
if(a==1)
***********************课程信息(学