资源描述
山东理工大学计算机学院
课 程 设 计
(软件开发实践)
班 级
软件1304
姓 名
郭江涵
学 号
指导教师
方春
二○一五年一月十三日
课程设计任务书及成绩评估
课题名称
固定资产管理系统
Ⅰ、题目的目的和规定:
1、 设计目的
基于C++面向对象编程语言的知识,用<<数据结构>>中的顺序存储、链表、堆栈、串、
树、图等数据结构,结合项目的具体需求编写该系统,能纯熟掌握几种基本数据结构的基本操作。使用合适的数据结构和算法来实现各功能模块的增、删、改、查,把所学数据结构知识应用到实际软件开发中去。巩固和加深对数据结构的理解,通过上机实验、调试程序,加深对课本知识的理解,最终使学生可以纯熟应用数据结构的知识写程序。能针对给定题目,选择相应的数据结构,分析并设计算法,进而给出问题的对的求解过程并编写代码实现。
2、设计题目规定:
随着公司业务不断发展,人员越来越多,固定资产的管理人员压力逐渐增大,需要建立数据库和使用软件系统来进行管理。
公司对固定资产的定义为:价值超过2023元人民币的设备。例如彩色喷墨打印机、计算机、扫描仪、机房其他设备,而打印纸、书籍等不属于固定资产,属于易耗品。
通过同资产管理人员和该公司领导的面谈,总结和归纳之后,他们需要软件具有以下的功能:
1. 管理员登录
2. 固定资产信息管理
3. 人员信息管理
4. 资产配置:领用、归还
5. 资产处置:调拨、变卖、报废
案例覆盖技能点
1、 数组、字符串、运算符重载
2、 类的封装、继承、多态性
3、 虚函数、纯虚函数和抽象类
4、 输入输出流的操作
5、 程序算法的设计说明(流程图形式)
6、 常用数据结构的操作
7、 例如:顺序存储、链表、树、图等
系统基本模块涉及:
功能点
难度
登录
★★
资产信息管理
★★★★
人员信息管理
★★★
资产配置
★★★★
资产处置
★★★★★
Ⅱ、设计进度及完毕情况
日 期
内 容
1.05-1.09
选取参考书,查阅有关文献资料,完毕资料搜集和系统分析工作。
1.09~1.12
创建相关数据结构,录入源程序。
1.13~1.13
调试程序并记录调试中的问题,初步完毕课程设计报告。
1.14~1.14
上交课程设计报告打印版并进行课程设计答辩,规定每个同学针对自己的设计回答指导教师3-4个问题。
考核结束后将课程设计报告和源程序的电子版交班长统一刻光盘上交。
Ⅲ、重要参考文献及资料
[1] 严蔚敏 数据结构(C语言版)清华大学出版社 1999
[2] 谭浩强 C语言程序设计 清华大学出版社
[3] 与所用编程环境相配套的C语言或C++相关的资料
Ⅳ、成绩评估
成绩: (教师填写)
指导老师: (签字)
二○一五 年 一 月 十三 日
目 录
第一章 概述……………………………………………………………1
第二章 系统分析………………………………………………………2
第三章 概要设计………………………………………………………3
第四章 具体设计………………………………………………………13
第五章 运营与测试……………………………………………………24
第六章 总结与心得……………………………………………………29
参考文献………………………………………………………………30
第一章 概述
课程设计是实践性教学中的一个重要环节,它以某一课程为基础,可以涉及和课程相关的各个方面,是一门独立于课程之外的特殊课程。课程设计是让同学们对所学的课程更全面的学习和应用,理解和掌握课程的相关知识。《数据结构》是一门重要的专业基础课,是计算机理论和应用的核心基础课程。
数据结构课程设计,规定学生在数据结构的逻辑特性和物理表达、数据结构的选择和应用、算法的设计及其实现等方面,加深对课程基本内容的理解。同时,在程序设计方法以及上机操作等基本技能和科学作风方面受到比较系统和严格的训练。
课程设计可以锻炼学生们的思考构思能力和动手实践能力,通过课程设计中的实际性问题,可以让学生把平日所学理论知识与亲身实践结合在一起,更好的提高学生编程的综合能力。
课程设计还可以让学生查出自己平日里的局限性,结合实际问题,把理论与实际相结合,找出以后的学习努力方向,查漏补缺,更进一层楼。
第二章 系统分析
1、本次课程设计,有小组共同分工完毕代码的编写和实现程序的运营。在整个固定资产管理系统中,一共涉及登陆、资产信息管理、人员信息管理、资产配置和资产处置五大模块,我重要负责人员信息管理模块和登陆模块以及程序代码整体大框架的编写。
2、在登陆模块中,重要是管理员登陆系统,进行对资产信息以及人员信息的增删改查,为了系统人员信息以及资产信息的安全性问题,需要对管理员登录信息进行安全性验证,所以管理员登陆系统需要输入自己的账户名和密码,(系统管理员初始账户和密码为“guanliyuan”“1234”),只有密码和账户都输入对的才干进入系统,否则系统会提醒管理员重新输入自己的账户和密码,知道输入对的才干进入系统。
3、在人员信息管理模块中,重要要实现人员信息的增删改查功能,这里的“人员”是指也许领用资产的人,人员的信息涉及人员编号、姓名、职务和备注。在该模块中可以选择某个员工查看该员工的所属资产。在这个模块中,定义了LinkNode和LinkList两个类,还用了链表的方法实现数据的查找与增长删除和查询。系统显示通过查询人员编号来找到人员信息进行删除或者修改,其实是通过查询链表结点来查找每个数据,为了保证通过编号能对的的找到相应编号的人员,所以管理员在添加人员信息时,需要先输入结点位置,再输入编号,并且结点值需要与编号相同,(在系统中显示的是“请输入要添加的人员编号”“请再次确认人员编号”,其实第一次输入的人员编号是插入信息的结点位置值,第二次输入的才是人员编码)所认为了避免管理员输入的结点位置值和人员编号不相同,在添加人员信息模块的代码中又添加了一个if判断语句,来判断管理员输入的结点位置值和人员编号值是否相同,只有相同时才干继续添加其他信息,否则系统将提醒输入犯错,继续添加人员编号。
第三章 概要设计
1、 数据结构的设计
本程序设计重要采用的是数据结构的思想,运用了C++的手段,完毕了代码的编写和实现了程序的运营,在人员信息管理模块中,运用了链表的方法以及类的思想,还运用了构造函数和析构函数实现了代码的编写。
2、 算法的设计
(1)、登陆信息的有效性验证:
void logn()
{
cout<<"管 理 员 你 好, 请 登 录。。。。"<<endl;
cout<<"请 输 入 您 的 账 号:";
cin>>zhanghao;
cout<<"请 输 入 你 的 密 码:";
cin>>mima;
while(zhanghao!="guanliyuan"||mima!=ma)
{
cout<<"| 账号密码错误,请重新输入: |"<<endl;
cout<<"请输入您的账号:";
cin>>zhanghao;
cout<<"请输入你的密码:";
cin>>mima;
}
if(zhanghao=="guanliyuan"&&mima==ma)/*有效性检查,管理员进入系统*/
{
(各模块代码。。。。。。)
}
(2)LinkNode和LinkList类的定义:
class LinkNode
{
/*编号、姓名、职务和备注*/
int data;//编号
string name;//姓名
string staff;//职位
string remark;//备注
/*指向下一个节点*/
LinkNode *next;
public:
LinkNode( void )/*默认构造函数*/
{
data = 0;
name="空";
staff="空";
remark="空";
next = NULL;
}
LinkNode( const LinkNode &obj )/*构造函数,实现初始化*/
{
data = obj.data;
name=obj.name;
staff=obj.staff;
remark=obj.remark;
next = obj.next;
}
~LinkNode( void )/*析构函数*/
{
data = 0;
name="空";
staff="空";
remark="空";
next = NULL;
}
void setData( int a )/*设立data*/
{
data = a;
}
int getData( void )/*获得data*/
{
return data;
}
void set_name( string a )
{
name= a;
}
string get_name( void )/*获得data*/
{
return name;
}
void set_staff( string a )
{
staff= a;
}
string get_staff( void )/*获得data*/
{
return staff;
}
void set_remark( string a )
{
remark= a;
}
string get_remark( void )/*获得data*/
{
return remark;
}
void setNext( LinkNode *p )
{
next = p;
}
LinkNode *getNext( void )
{
return next;
}
void pp( void )
{
data++;
}
void ss( void )
{
data--;
}
};
typedef LinkNode* pLink;
class LinkList
{
LinkNode head;
public:
LinkList( void )
{
head.setData( 0 );
head.set_name("空");
head.set_staff("空");
head.set_remark("空");
head.setNext( NULL );
}
LinkList( const LinkList &obj )
{
pLink p, q = &head;
head = obj.head;
p = head.getNext();
head.setNext( NULL );
while( p )
{
q->setNext( new LinkNode );
q = q->getNext();
q->setData( p->getData() );
p = p->getNext();
}
}
~LinkList( void )
{
MakeEmpty();
}
void MakeEmpty( void )
{
pLink p = &head, q = p->getNext();
head.setData( 0 );
head.set_name("空");
head.set_staff("空");
head.set_remark("空");
while( q )
{
p->setNext( q->getNext() );
delete q;
q = p->getNext();
}
}
int Length( void )
{
return head.getData();
}
void Insert( int x,string a,string b,string c, int i )
{
int n = -1;
pLink p = &head, q;
if( i < 0 )
return;
while( p->getNext() && ( ++n < i ) )
p = p->getNext();
q = new LinkNode;
q->setData( x );
q->set_name(a);
q->set_staff(b);
q->set_remark(c);
q->setNext( p->getNext() );
p->setNext( q );
head.pp();
}
void Delete( int x )
{
pLink p = &head, q = head.getNext();
while( q )
if( q->getData() == x )
{
p->setNext( q->getNext() );
delete q;
q = p->getNext();
}
else
{
p = p->getNext();
q = q->getNext();
}
}
int ReMove( int i )
{
pLink p = &head, q;
int n = -1;
while( p->getNext() && ( ++n < i ) )
p = p->getNext();
if( p )
return 0;
else
{
q = p->getNext();
p->setNext( q->getNext() );
delete q;
return 1;
}
}
int Find( int x )
{
pLink p = head.getNext();
while( p )
{
if( p->getData() == x )
return 1;
p = p->getNext();
}
return 0;
}
void Display( void )
{
pLink p = head.getNext();
while( p )
{
cout<<"编号:" << p->getData() << endl;
cout<<"姓名:"<<p->get_name()<<endl;
cout<<"职位:"<<p->get_staff()<<endl;
cout<<"备注:"<<p->get_remark()<<endl;
p = p->getNext();
}
}
};
(3)、默认构造函数
LinkNode( void )/*默认构造函数*/
{
data = 0;
name="空";
staff="空";
remark="空";
next = NULL;
}
(4)、构造函数,实现初始化
LinkNode( const LinkNode &obj ) {
data = obj.data;
name=obj.name;
staff=obj.staff;
remark=obj.remark;
next = obj.next;
}
(5)、析构函数
~LinkNode( void )
{
data = 0;
name="空";
staff="空";
remark="空";
next = NULL;
}
(6)、主界面函数
int menu( void )
{
int re;
system( "cls" );
cout<<"\t\t欢迎进入固定资产管理系统---人员管理模块"<<endl;
cout << "\t\t1.置空" << endl;
cout << "\t\t2.显示人员个数:" << endl;
cout << "\t\t3.插入人员" << endl;
cout << "\t\t4.删除所有指定值的人员" << endl;
cout << "\t\t5.移除指定位置的人员" << endl;
cout << "\t\t6.查找有无指定值的人员" << endl;
cout << "\t\t7.显示" << endl;
cout << "\t\t8.退出" << endl;
cout<<"\t\t请输入您的选择:"<<endl;
cin >> re;
system( "cls" );
if( re <= 8 && re > 0 )
return re;
else
return 0;
}
(7)、删除人员信息函数:
void Delete( int x )
{
pLink p = &head, q = head.getNext();
while( q )
if( q->getData() == x )
{
p->setNext( q->getNext() );
delete q;
q = p->getNext();
}
else
{
p = p->getNext();
q = q->getNext();
}
}
(8)、移除人员信息函数:
int ReMove( int i )
{
pLink p = &head, q;
int n = -1;
while( p->getNext() && ( ++n < i ) )
p = p->getNext();
if( p )
return 0;
else
{
q = p->getNext();
p->setNext( q->getNext() );
delete q;
return 1;
}
}
(9)查找人员信息函数:
int Find( int x )
{
pLink p = head.getNext();
while( p )
{
if( p->getData() == x )
return 1;
p = p->getNext();
}
return 0;
}
(10)、显示人员信息函数
void Display( void )
{
pLink p = head.getNext();
while( p )
{
cout<<"编号:" << p->getData() << endl;
cout<<"姓名:"<<p->get_name()<<endl;
cout<<"职位:"<<p->get_staff()<<endl;
cout<<"备注:"<<p->get_remark()<<endl;
p = p->getNext();
}
}
第四章 具体设计
(一)人员信息管理模块
#include <iostream>
#include <cstdlib>
#include<string>
using namespace std;
class LinkNode
{
/*编号、姓名、职务和备注*/
int data;//编号
string name;//姓名
string staff;//职位
string remark;//备注
/*指向下一个节点*/
LinkNode *next;
public:
LinkNode( void )/*默认构造函数*/
{
data = 0;
name="空";
staff="空";
remark="空";
next = NULL;
}
LinkNode( const LinkNode &obj )/*构造函数,实现初始化*/
{
data = obj.data;
name=obj.name;
staff=obj.staff;
remark=obj.remark;
next = obj.next;
}
~LinkNode( void )/*析构函数*/
{
data = 0;
name="空";
staff="空";
remark="空";
next = NULL;
}
void setData( int a )/*设立data*/
{
data = a;
}
int getData( void )/*获得data*/
{
return data;
}
void set_name( string a )
{
name= a;
}
string get_name( void )/*获得data*/
{
return name;
}
void set_staff( string a )
{
staff= a;
}
string get_staff( void )/*获得data*/
{
return staff;
}
void set_remark( string a )
{
remark= a;
}
string get_remark( void )/*获得data*/
{
return remark;
}
void setNext( LinkNode *p )
{
next = p;
}
LinkNode *getNext( void )
{
return next;
}
void pp( void )
{
data++;
}
void ss( void )
{
data--;
}
};
typedef LinkNode* pLink;
class LinkList
{
LinkNode head;
public:
LinkList( void )
{
head.setData( 0 );
head.set_name("空");
head.set_staff("空");
head.set_remark("空");
head.setNext( NULL );
}
LinkList( const LinkList &obj )
{
pLink p, q = &head;
head = obj.head;
p = head.getNext();
head.setNext( NULL );
while( p )
{
q->setNext( new LinkNode );
q = q->getNext();
q->setData( p->getData() );
p = p->getNext();
}
}
~LinkList( void )
{
MakeEmpty();
}
void MakeEmpty( void )
{
pLink p = &head, q = p->getNext();
head.setData( 0 );
head.set_name("空");
head.set_staff("空");
head.set_remark("空");
while( q )
{
p->setNext( q->getNext() );
delete q;
q = p->getNext();
}
}
int Length( void )
{
return head.getData();
}
void Insert( int x,string a,string b,string c, int i )
{
int n = -1;
pLink p = &head, q;
if( i < 0 )
return;
while( p->getNext() && ( ++n < i ) )
p = p->getNext();
q = new LinkNode;
q->setData( x );
q->set_name(a);
q->set_staff(b);
q->set_remark(c);
q->setNext( p->getNext() );
p->setNext( q );
head.pp();
}
void Delete( int x )
{
pLink p = &head, q = head.getNext();
while( q )
if( q->getData() == x )
{
p->setNext( q->getNext() );
delete q;
q = p->getNext();
}
else
{
p = p->getNext();
q = q->getNext();
}
}
int ReMove( int i )
{
pLink p = &head, q;
int n = -1;
while( p->getNext() && ( ++n < i ) )
p = p->getNext();
if( p )
return 0;
else
{
q = p->getNext();
p->setNext( q->getNext() );
delete q;
return 1;
}
}
int Find( int x )
{
pLink p = head.getNext();
while( p )
{
if( p->getData() == x )
return 1;
p = p->getNext();
}
return 0;
}
void Display( void )
{
pLink p = head.getNext();
while( p )
{
cout<<"编号:" << p->getData() << endl;
cout<<"姓名:"<<p->get_name()<<endl;
cout<<"职位:"<<p->get_staff()<<endl;
cout<<"备注:"<<p->get_remark()<<endl;
p = p->getNext();
}
}
};
int menu( void )
{
int re;
system( "cls" );
cout << "\t\t1.置空" << endl;
cout << "\t\t2.显示人员个数:" << endl;
cout << "\t\t3.插入人员" << endl;
cout << "\t\t4.删除所有指定值的人员" << endl;
cout << "\t\t5.移除指定位置的人员" << endl;
cout << "\t\t6.查找有无指定值的人员" << endl;
cout << "\t\t7.显示" << endl;
cout << "\t\t8.退出" << endl;
cout<<"\t\t请输入您的选择:"<<endl;
cin >> re;
system( "cls" );
if( re <= 8 && re > 0 )
return re;
else
return 0;
}
int main( void )
{
LinkList L;
int a, b;
string info1,info2,info3;
while( true )
switch( menu() )
{
case 0:
cout << "输入有误,请重新输入" << endl;
break;
case 1:
L.MakeEmpty();
break;
case 2:
cout << "共有 " << L.Length() << " 个人员" << endl;//显示的人员数是结点的个数
system( "pause" );
break;
case 3:
cout << "请输入要添加的人员编号:";
cin >> a;
cout << "请再次确认人员编号:" ;
cin >> b;
while(a!=b)
{
cout<<"两次输入不一致,请重新输入"<<endl;
cout << "请输入要添加的人员编号:";
cin >> a;//结点位置
cout << "请再次确认人员编号:" ;
cin >> b;//编号
}
if(a==b)
{
cout<<"姓名"<<endl;
cin>>info1;
cout<<"职位:"<<endl;
cin>>info2;
cout<<"备注:"<<endl;
cin>>info3;
L.Insert( b, info1,info2,info3,a );
break;
}
case 4:
cout<<"请输入要删除的人员编号"<<endl;
cin >> a;
L.Delete( a );
break;
case 5:
cout<<"请输入要移除的人员编号"<<endl;
cin >> a;
if( L.ReMove( a ) )
cout << "删除成功" << endl;
else
cout << "未能找到指定结点" << endl;
system( "pause" );
break;
case 6:
cout<<"请输入要查询的人员编号"<<endl;
cin >> a;
if( L.Find( a ) )
cout << "找到了编号为" << a << "的人员" << endl;
else
cout << "没有编号为" << a << "的人员" << endl;
system( "pause" );
break;
case 7:
L.Display();
system( "pause" );
break;
default:
return 0;
}
return 0;
}
(二)管理员登陆模块
void logn()
{
cout<<"管 理 员 你 好, 请 登 录。。。。"<<endl;
cout<<"请 输 入 您 的 账 号:";
cin>>zhanghao;
cout<<"请 输 入 你 的 密 码:";
cin>>mima;
while(zhanghao!="guanliyuan"||mima!=ma)
{
cout<<"| 账号密码错误,请重新输入: |"<<endl;
cout<<"请输入您的账号:";
cin>>zhanghao;
cout<<"请输入你的密码:";
cin>>mima;
}
if(zhanghao=="guanliyuan"&&mima==ma)/*有效性检查,管理员进入系统*/
{
int flg=1;
while(flg)
{
switch(print_menu1())/*接受选择的结果并且进行解决*/
{
case 1:
{
manage();
break;
}/*1.固定资产信息管理*/
case 2:
{
manage_person();
break;
}/*2.人员信息管理 */
case 3:
{
break;
}/*3.资产配置 */
case 4:
{
break;
}/*4.资产处置 */
case 5:
{
update();/*修改密码*/
break;
}/*5.修改管理员密码 */
case 0:
{
exit(0);
break;
}
}
}
}
}
展开阅读全文