C语言课程设计实验设备管理.docx
《C语言课程设计实验设备管理.docx》由会员分享,可在线阅读,更多相关《C语言课程设计实验设备管理.docx(30页珍藏版)》请在冰豆网上搜索。
C语言课程设计实验设备管理
《程序设计基础(C)》课程设计报告
实验室设备管理系统
学生姓名:
陈广鹏
学号:
201211353
班级:
电力1201班
指导老师:
邓伟华
日期:
2013-7-5
兰州交通大学新能源与动力工程学院
目录
1课程设计的目的………………………………………………………………2
2课程设计名称及内容…………………………………………………………2
2.1程序设计组成框图…………………………………………………………2
3任务要求………………………………………………………………………3
4课程设计报告内容……………………………………………………………3
流程图显示…………………………………………………………………3
4.2程序实现思路………………………………………………………………6
5程序演示………………………………………………………………………9
6总结……………………………………………………………………………13
参考文献…………………………………………………………………………14
附录(源代码)…………………………………………………………………28
实验室设备管理系统
1、课程设计目的
将理论教学中涉及到的知识点贯穿起来,对不同的数据类型、程序控制结构、数据结构作一比较和总结,结合设计题目进行综合性应用,对所学知识达到融会贯通的程度。
通过课程设计,学生在下述各方面的能力应该得到锻炼:
(1)进一步巩固、加深学生所学专业课程《C++程序设计语言》的基本理论知识,理论联系实际,进一步培养学生综合分析问题,解决问题的能力。
(2)全面考核学生所掌握的基本理论知识及其实际业务能力,从而达到提高学生素质的最终目的。
(3)利用所学知识,开发小型应用系统,掌握运用C++语言编写调试应用系统程序,训练独立开发应用系统,进行数据处理的综合能力。
(4)对于给定的设计题目,如何进行分析,理清思路,并给出相应的数学模型。
(5)掌握结构化程序设计方法,熟悉面向对象程序设计方法。
(6)熟练掌握C++语言的基本语法,灵活运用各种数据类型。
(7)进一步掌握在集成环境下如何调试程序和修改程序。
2、课程设计名称及内容
课程设计名称:
实验室设备管理系统
设计内容:
编写一个简单的实验室设备管理程序,帮助管理实验室设备信息。
要求具有设备信息管理的功能。
其中包括设备信息的录入、删除、查询和修改等功能。
还应包括对实验室信息管理的功能。
其中包括对实验室信息的录入、删除、修改和查询等功能。
2.1程序设计组成框图
3、任务和要求
运用面向对象的程序设计方法,要求选择动态数组类模板或链表类模板,任务中要运用I/O流对象对文件进行读写操作。
本题程序应提供的基本管理功能有:
1)添加:
即增加一条信息到设备信息中,或增加一条信息到实验室信息中;
2)显示:
即在屏幕上显示所有设备或实验室信息;
3)存储:
即将设备信息和实验室信息分别保存在文件中;
4)装入:
即将文件中的信息读入程序;
5)查询:
可根据设备名称查找具体情况,若找到,显示在屏幕上;
6)修改:
可修改设备信息,或对实验室信息进行修改。
4、课程设计报告内容
4.1流程图显示
4.2程序实现思路
定义一个结点类,用于存放实验室设备的各种信息;
定义一个Link类,把数据以链表的形式存储,链表的每个结点为一个Node对象;
定义一个Shebei类,用于包装Link类及菜单操作;
定义Link类和Shebei类的成员函数,实现要求的各种功能;
Link类:
classLink//Link类,把数据以链表的形式存储,链表的每个结点为一个Node对象
{
private:
Node*head;//链表的头指针,为Node对象类型的指针
public:
Link();//构造函数,初始化变量
boollinkIsEmpty();//判断链表是否为空
voidlinkInsert(Node*newnode);//向链表中插入新的结点
boollinkDelete(intnid);//从链表中删除的结点
voidlinkClear();//清空链表中数据
voidlinkView();//查看链表中数据
Node*linkFind(intnid);//在链表中查找id为nid结点,返回指向该结点的指针
Node*getHead();//获取头指针
};
Shebei类:
classShebei
{
private:
Linkclink;//Link对象成员
boolk;//记录数据是否被修改
public:
Shebei();
voidShebeiClear();
voidShebeiInsert();
voidShebeiDelete();
voidShebeiFind();
voidShebeiModify();
voidShebeiView();
voidShebeiLoad();
voidShebeiSave();
voidExit();//退出程序
voidshowMenu();//显示菜单
voidshowTip();//显示操作提示
voiddoMenu(charn);//执行相应菜单项功能
};
然后就是各个函数的具体定义。
菜单选择功能的实现,使用switch语句;
菜单选择函数的定义:
voidShebei:
:
showMenu()
{
cout<<"\t\t**************************************************"<cout<<"\t\t**"<cout<<"\t\t*1--清空:
清除所有设备信息*"<cout<<"\t\t**"<cout<<"\t\t*2--添加:
增加一个设备到设备信息中*"<cout<<"\t\t**"<cout<<"\t\t*3--删除:
删除指定设备数据*"<cout<<"\t\t*4--查找:
根据设备数据查找设备信息*"<cout<<"\t\t**"<cout<<"\t\t*5--修改:
修改指定设备信息*"<cout<<"\t\t**"<cout<<"\t\t*6--显示:
在屏幕上显示所有设备的信息*"<cout<<"\t\t**"<cout<<"\t\t*7--存储:
将设备信息保存在一个文件中*"<cout<<"\t\t**"<cout<<"\t\t*0--退出:
安全的退出本系统*"<cout<<"\t\t**************************************************"<}
voidShebei:
:
showTip()
{
cout<cout<<"****************操作完成*********************"<cout<<"**************选择0-7继续*****************"<cout<<"请选择:
";
}
voidShebei:
:
doMenu(charn)
{
switch(n)
{
case'1':
ShebeiClear();
break;
case'2':
ShebeiInsert();
break;
case'3':
ShebeiDelete();
break;
case'4':
ShebeiFind();
break;
case'5':
ShebeiModify();
break;
case'6':
ShebeiView();
break;
case'7':
ShebeiSave();
break;
case'0':
Exit();
break;
default:
cout<<"输入错误!
";
}
}
5、程序演示
5.1、进入系统
5.2添加设备信息
5.3删除指定设备信息
5.4根据设备数据查找设备信息
5.5修改设备信息
5.6显示所有设备信息
5.7将设备信息存储在文本中
6、总结
经过一个星期的C++程序设计,让我明白到了C++这门课的重要性,C++作为一门电脑学的基础课,是我们必须掌握的顺电脑飞速发展的今天,掌握电脑的应用是如今每一位大学生所必须掌握的,掌握电脑有对各人来说有我种好处,学习电脑是一种本领,也是一种生存的技能,而C++做为电脑的基础,掌握它更是我们这些大学生所必须掌握的。
经过这次程序设计,让我认识到了C++的运用是相当广泛的,才拿到题目的时候,我真的不知道该怎么办,但随着慢慢的设计,思路也总算有了,这样才能继续进行下去,这时我才真正认识到了C+++的功能原来是那么的多。
一个复杂的实验室设备管理系统,经过500-600行的代码就可以完完全全的达到,这是让我非常惊讶的,但相对,如今的C++也是非常难的,这学期学到的一些内容,都是C++的重点,但学下来以后感觉还是很难所以必须先打好基础,基础好了,学什么都会容易很多。
这次的程序设计让我重新认识到了C++,这是一门非常重要的科目,我们必须付出很多倍的努力学习它,才能熟练地掌握它。
源代码
#include
#include
#include
#include
#include
usingnamespacestd;
classNode//结点类,用于存放客户的各种信息
{
public:
longid;//实验设备编号
stringname;//名称
stringtype;//设备类型
stringsuoshushiyanshi;//实验设备所属实验室
stringbuytime;//购买时间
stringprice;//价格
stringamount;//库存量
stringshengchanriqi;//生产日期
stringshiyongshouming;//使用寿命
stringweight;//重量
Node*next;//指向下一结点的指针
Node(longid=000,stringnname="noname",stringntype="unkown",stringnsuoshushiyanshi="unknow",
stringnbuytime="unknow",stringnprice="unknow",stringnamount="unknow",stringnshengchanriqi="unkown",
stringnshiyongshouming="unknow",stringnweight="unknow");//构造函数,初始化变量
};
classLink//Link类,把数据以链表的形式存储,链表的每个结点为一个Node对象
{
private:
Node*head;//链表的头指针,为Node对象类型的指针
public:
Link();//构造函数,初始化变量
boollinkIsEmpty();//判断链表是否为空
voidlinkInsert(Node*newnode);//向链表中插入新的结点
boollinkDelete(intnid);//从链表中删除的结点
voidlinkClear();//清空链表中数据
voidlinkView();//查看链表中数据
Node*linkFind(intnid);//在链表中查找id为nid结点,返回指向该结点的指针
Node*getHead();//获取头指针
};
Node:
:
Node(longnid,stringnname,stringntype,stringnsuoshushiyanshi,
stringnbuytime,stringnprice,stringnamount,stringnshengchanriqi,
stringnshiyongshouming,stringnweight)
{
id=nid;
name=nname;
type=ntype;
suoshushiyanshi=nsuoshushiyanshi;
buytime=nbuytime;
price=nprice;
amount=namount;
shengchanriqi=nshengchanriqi;
shiyongshouming=nshiyongshouming;
weight=nweight;
next=NULL;
}
Link:
:
Link()//构造函数,初始化链表为空
{
head=NULL;
}
boolLink:
:
linkIsEmpty()//判断链表是否为空,空则返回true
{
return(head==NULL);
}
------共同设计
voidLink:
:
linkInsert(Node*newnode)//按id值从小到大的顺序,插入新的结点
{
Node*p1;
if(!
head)//链表为空的情况
head=newnode;
elseif((head->id)>(newnode->id))//插入到第一个结点的情况
{
newnode->next=head;
head=newnode;
}
else//插入到第二个及以后情况
{
p1=head;
while
(1)
{
if(!
(p1->next))
{
p1->next=newnode;
break;
}
elseif((p1->next)->id>newnode->id)
{
newnode->next=p1->next;
p1->next=newnode;
break;
}
p1=p1->next;
}
}
}
boolLink:
:
linkDelete(intnid)//删除结点,成功则返回true
{
Node*p;
if(head==NULL)//链表为空的情况
returnfalse;
if(head->id==nid)//删除的为第一个结点的情况
{
head=head->next;
returntrue;
}
p=head;
while(p->next)//删除的为第二个及以后结点的情况
{
if((p->next)->id==nid)
{
p->next=(p->next)->next;
returntrue;
}
p=p->next;
}
returnfalse;
}
-------由陈广鹏设计
voidLink:
:
linkClear()//清空链表
{
head=NULL;
}
Node*Link:
:
linkFind(intnid)//查找id值为nid的结点,返回该结点的指针
{
Node*p=head;//没找到符合条件的结点的话,返回的指针值为NULL
while(p)
{
if(p->id==nid)
break;
else
p=p->next;
}
returnp;
}
voidLink:
:
linkView()//显示链表数据
{
Node*p=head;
while(p)
{
cout<<"实验设备编号:
"<id<cout<<"名称:
"<name<cout<<"类型:
"<type<cout<<"所属实验室:
"<suoshushiyanshi<cout<<"购买时间:
"<buytime<cout<<"价格:
"<price<cout<<"库存量:
"<amount<cout<<"生产日期:
"<shengchanriqi<cout<<"使用寿命:
"<shiyongshouming<cout<<"重量:
"<weight<cout<<"*******************************************************"<p=p->next;
}
}
Node*Link:
:
getHead()
{
returnhead;
}
//类Shebei,用于包装Link类及菜单操作
classShebei
{
private:
Linkclink;//Link对象成员
boolk;//记录数据是否被修改
public:
Shebei();
voidShebeiClear();
voidShebeiInsert();
voidShebeiDelete();
voidShebeiFind();
voidShebeiModify();
voidShebeiView();
voidShebeiLoad();
voidShebeiSave();
voidExit();//退出程序
voidshowMenu();//显示菜单
voidshowTip();//显示操作提示
voiddoMenu(charn);//执行相应菜单项功能
};
Shebei:
:
Shebei()
{
Link();//调用成员对象的构造函数
ShebeiLoad();//从文件中读取数据,创建链表
k=false;//设置数据被修改
}
-----------由陈军文设计
voidShebei:
:
ShebeiClear()//清空设备记录
{
clink.linkClear();
cout<<"成功清空设备信息记录!
"<}
voidShebei:
:
ShebeiInsert()//插入设备记录
{
Node*p=newNode();
cout<<"请输入设备编号:
";
cin>>p->id;
cout<<"请输入名称:
";
cin>>p->name;
cout<<"请输入类型:
";
cin>>p->type;
cout<<"请输入所属实验室:
";
cin>>p->suoshushiyanshi;
cout<<"请输入购买时间:
";
cin>>p->buytime;
cout<<"请输入价格:
";
cin>>p->price;
cout<<"请输入库存量:
";
cin>>p->amount;
cout<<"请输入生产日期:
";
cin>>p->shengchanriqi;
cout<<"请输入设备重量:
";
cin>>p->weight;
if(!
clink.linkFind(p->id))//判断设备信息是否存在
{
clink.linkInsert(p);
k=true;
}
else
cout<<"设备编号为"<id<<"的的设备已存在,插入失败!
"<}
----------由陈磊设计
voidShebei:
:
ShebeiDelete()//删除设备记录
{
longi;
if(clink.linkIsEmpty())//链表为空的情况
cout<<"没有设备记录!
"<else
{
cout<<"请输入设备编号:
";
cin>>i;
if(clink.linkDelete(i))
{
cout<<"成功删除编号为"<
"<k=true;
}
else
cout<<"没有找到编号为"<
"<}
}
voidShebei:
:
ShebeiFind()//查找某编号的设备记录
{
longn;
Node*p;
if(clink.linkIsEmpty())//链表为空的情况
cout<<"没有设备记录!
"<else
{
cout<<"请输入要查找设备的编号:
";
cin>>n;
p=clink.linkFind(n);//获得找到的结点的指针
if(p)//指针值不为NULL时
{
cout<<"实验设备编号:
"<id<cout<<"名称:
"<name<cout<<"类型:
"<type<cout<<"所属实验室:
"<suoshushiyanshi<cout<<"购买时间:
"<buytime<cout<<"价格:
"<price<cout<<"库存量:
"<amount<cout<<"生产日期:
"<shengchanriqi<cout<<"使用寿命:
"<shiyongshouming<cout<<"重量:
"<weight<}
else//指针值为NULL时
cout<<"没有找到编号为"<"<}
}
voidShebei:
:
ShebeiModify()//修改某编号的设备信息
{
longn;
Node*p;
if(clink.linkIsEmpty())//链表为空的情况
cout<<"没有设备记录!
"<else
{
cout<<"请输入要修改设备的编号:
";
cin>>n;
p=clink.linkFind(n);//获得找到的结点的指针
if(p)//指针值不为NULL时
{
cout<<"实验设备编号:
"<id<cout<<"名称: