计算机科学与技术(本科)《软件工程》实验报告1
班级:13春计算机科学与技术
姓名:史俊杰
学号:1333101200206
结构化需求分析—大学图书馆图书信息管理系统
一.编写目的
根据需求调研分析报告,定义系统功能和系统数据流图,通过编写需求分析规格说明书,让开发人员能够根据需求规格说明书来开发项目。通过本实验熟悉和掌握一种软件开发工具,能够设计一个简单的软件系统,并综合运用过去学习到的编程知识实现一个软件的局部功能,为毕业设计打下基础。
二.项目背景
根据学校希望能够充分利用现代科技来提高图书管理的效率,在原有的办公系统基础上进行扩展,将一些可以用计算机来管理的都进行计算机化,使得图书馆管理人员工作更加方便,工作效率也更加的高。
三.系统需求说明
1.系统范围
其中,圆角的长方形表示我们要开发的图书馆管理系统,该系统与如下4个外部产生联系。
首先,学生数据库:由于现在学校已经开通了一卡通,为此需要导入教务处里面的学生信息,将一卡通作为借书的标记,图书馆管理系统应该有这样的一个接口来识别一卡通的信息。
其次,图书等业五方面的数据库,这方面的数据库主要是对图书等方面的管理,比如说是图书的购入,图书的借出,图书的归还等等。
再者,图书馆的管理员,可以通过图书馆管理系统来通知给休息在家或者在外的工作人员。
最后,图书馆工作人员:他们可以通过图书馆管理系统来接受通知没可以随时查询信息。
2.系统功能需求
2.1 总体需求分析
面对大量繁杂的图书馆管理,分类,查询与借还工作,迫切的需要通过计算机来帮助解决,介绍图书馆管理人员的工作量。信捷图书馆管理系统采用符合有关国际标准,具有良好的开放性和兼容性的计算机,外部设备,操作系统及应用软件,达到和办公自动化网络的连接,实现远程管理,异地续借等功能。“图书借阅管理系统”需要具有界面友好,功能强大, 使用方便,安全可靠等优点。通过图书馆管理工作人员对图书馆管理系统的理解:
1,图书馆管理系统需要有能够及时地查询书库中图书的库存量,以便及时准确地为学生服务,提供借阅信息,但是不能更改数据,无信息处理权,即可以打印清单,浏览数据等,管理权限由系统管理员掌握分配。这个也是图书馆的总体需求。
2,图书馆各项数据信息必须保证安全性和完整性,网络系统设有通信,程序,网络三级权限和口令管理,确保系统的安全。这个是对数据的安全考虑的。
3,系统管理员根据市场图书行情定时的整理系统数据库,对图书的借阅情况,学生的管理情况,书库的增减等均可由计算机执行,并将运行结果归档。这个是从数据的整理角度考虑。
详细调查后,可以对系统管理业务的流程进行详细的描述,如下图:
图书馆管理系统的管理流程图
注:在这个图中应该还需要学生信息查询,而这个查询系统可以作为外系统使用,即作为图书馆管理系统的子系统:图书信息查询和学生信息查询共同组成一个信息查询子系统
2.2详细需求分析
对于图书馆管理系统,由于基于现在硬件的限制,学校设施的限制,图书馆还没有达到全部自动化的程度,因而针对于现在学校的基本情况,对图书馆管理系统的模块可分成:两大类和7模块:一,管理系统:1.1基础信息设置;1.2购入新书;1.3学生借书;1.4学生还书;1.5图书注销;二,查询系统:2.1学生信息查询;2.2 图书信息查询;这些模块可由下图看出:
⑴.基础信息维护子系统
该模块主要是用于对图书馆信息,书籍信息,常用词库等项目进行初始化设置,这些设置一般不会轻易的更改,所包含的功能模块如下图:
图书馆信息;主要勇于设置本图书馆的基础信息,包括图书馆的名称,馆长,负责人,电话,说明等等;
系统参数设置:主要用于设置系统运行所需的参数,包括办证费用,证件有效期,图书超期罚款金额,期刊超期罚款金额等等;
书架设置:主要用于设置书架的基础信息,内容包括书架编号,书架名称等等;
管理员设置:主要勇于设置使用的人员及权限;
图书期刊词库设置:主要用于设置系统常用的词库,内容包括供应商,分级,附件,尺寸,语系,印刷等等信息的预先设定数值;
⑵.登陆
图书馆管理系统需要安全性的保证,需要管理员才能对系统进行管理
⑶.入库管理
购入新书时候需要为该书编制入库单。入库单内容应该包括图书分类目录号,书号,作者,价格,数量,和购书日期,将这些信息写入图书目录文件并修改文件中的库存总量(表示到现在为止,购入此种图书的数量);
⑷.学生借书
学生借书需要使用一卡通,系统首先要检查一卡通是否有效,若无效,则拒绝借书;若有效,则进一步检查概学生已经借阅的图书是否超过最大的限制数,若已经超了,则拒绝借书,否则接受借书,同时要将图书分类目录号,学生号,和借阅日期等自动写入学生借书文件。
⑸.学生还书
对于学生还书,系统会自动根据学生号和图书分类号,从借书文件中读出与该图书相关的借阅记录,表明还书日期,再写回结束文件中,若逾期,那么处以相应的罚款。
⑹.图书注销
通过工作人员填写的注销单,系统来修改图书目录文件中的库存总量。
⑺.图书查询
直接通过系统即可查询信息,不需要进行身份验证,面向所有的用户。
⑻.学生信息查询
直接通过系统即可查询信息,不需要进行身份验证,面向所有的用户。
3.系统数据需求
3.1图书馆管理系统的数据流程图
如下图:
顶层流程图:
第0层图:
第一层图:
(1):登陆子系统
(2)管理子系统
(3)查询子系统
注:图书馆管理系统总体上分两大模块:管理和查询。
管理模块:对象是图书馆的馆内人员。学生只能作为查询子系统的对象。
由于现在都实行了一卡通系统,所以需要从教务处将学生的数据导入学生文件中。
查询系统:有两个对象:图书馆管理人员和学生;两个实体查询的信息可以是一样的
3.2 图书馆管理系统E-R图
3.3 数据词典
1,数据流项目
<1: 数据流名:管理工作请求单
说明:管理请求单是系统根据工作人员或者管理人员的输入情况自动形成的,通过这个单子,来决定系统的行为:进行一些管理工作。
数据流来源:图书馆管理工作人员。
数据流去向:图书馆管理系统
数据流定义:管理工作请求单=[购入新书|学生借书|学生还书|图书注销]
<2:数据流名:查询信息请求单
说明:查询信息请求单是系统根据工作人员或者管理人员或者学生的输入情况自动形成的,通过这个单子,来决定系统的行为:进行一些查询工作。
数据流来源:图书馆管理工作人员,学生。
数据流去向:图书馆管理系统
数据流定义:查询信息请求单=[查询学生请求信息|查询图书请求信息]
<3: 数据流名:图书信息
说明:图书信息是系统经过图书信息查询之后产生的一组信息;
数据流来源:图书馆管理系统。
数据流去向:图书馆管理人员
数据流定义:图书信息=图书编号+ISBN+作者+出版社+价格+书架号+{借阅情况}
<4: 数据流名:学生信息
说明:学生信息是系统经过学生信息查询之后产生的一组信息;
数据流来源:图书馆管理系统。
数据流去向:图书馆管理人员和学生
数据流定义:学生信息=学生编号+姓名+性别+有效证件号码+联系方式+{借书情况}
<5: 数据流名:提示信息
说明:提示信息是系统根据一些非法操作,非法请求信息,或者合理操作,合理信息的来提示操作者对系统的操作情况;
数据流来源:图书馆管理系统。
数据流去向:图书馆管理人员和学生
<6: 数据流名:当前日期
说明:当前日期是因为系统对人员操作某信息的跟踪的需要。以便查询或维护。
数据流来源:系统时钟。
数据流去向:图书馆管理系统
数据流定义:当前日期=年/月/日/小时/分/秒;
<7: 数据流名:罚款单
说明:罚款单是系统经过根据学生的违规情况而产生的信息;
数据流来源:图书馆管理系统。
数据流去向:学生
数据流定义:罚款单=罚款编号+图书编号+学生编号+罚款金额+罚款日期+备注;
2,文件条目
<1: 数据文件名:学生文件
简述:存放的是学生基础信息数据。
数据文件组成:表单形式存储
文件内容:学生文件=学号+姓名+性别+出生日期+有效证件号码+联系方式+登记日期+有效期至;
存储方式: 以学生学号为记录关键字升序排列
<2:数据文件名:借书文件
简述:存放的是借书信息数据。
数据文件组成:表单形式存储
文件内容:借书文件=图书编号+学生编号+借阅日期+应还日期+状态
存储方式: 以图书编号和学生编号为记录关键字升序排列
<3: 数据文件名:入库单
简述:存放的是入库新书的信息数据。
数据文件组成:表单形式存储
文件内容:入库单=新书编号+书名+ISBN+数量+入库时间;
存储方式: 以新书编号为记录关键字升序排列
<4: 数据文件名:图书目录文件
简述:存放的是图书档案的信息数据。
数据文件组成:表单形式存储
文件内容:图书目录文件=图书编号+条形码+书名+类型+作者+译者+ISBN+出版社+价格+页码+书架名称+现存量+库存总量+入库时间+操作员+简介+借出次数+是否注销;
存储方式: 以图书编号为记录关键字升序排列
<5: 数据文件名:图书馆信息文件
简述:存放的是图书馆的基础信息数据。
数据文件组成:文档形式存储
文件内容:图书馆信息文件=图书馆名称+图书馆馆长+负责人+电话+说明;
<6: 数据文件名:书架设置信息文件
简述:存放的是设置书架的基础信息数据。
数据文件组成:文档形式存储
文件内容:书架设置信息文件=书架编号+书架名称;
<7: 数据文件名:图书词库设置文件
简述:存放的是系统常有的词库数据。
数据文件组成:文档形式存储
文件内容:图书词库设置文件=供应商+分级+附件+尺寸+语系+印刷;
<8: 数据文件名:系统参数设置信息文件
简述:存放的是系统参数设置信息数据。
数据文件组成:文档形式存储
文件内容:系统参数设置信息文件=办证费用+证件有效期+图书超期罚款金额;
3,加工说明
<1: 加工1.2:处理学生借书
加工逻辑:
BEGIN
读取学生借书请求信息和当前日期以及学生文件,图书目录文件
IF 在学生文件中找不到该学生或者图书目录文件中显示该图书属于注销图书或者该图书属于已借 THEN 输出非法借书请求(相当于拒绝借书)ELSE输出借书成功并将借书信息写入借书文件
END
<2: 加工1.3:处理学生还书
加工逻辑:
BEGIN
读取学生还书请求信息,当前日期,学生文件,图书目录文件和借书文件
IF (在图书目录文找到该图书是未借出或者该图书是挂失)
THEN 输出非法还书请求
ELSE IF 在借书文件中找到到当日为止,该书超期
THEN 罚款
ELSE
输出还书成功并且更新借书文件
END
<3: 加工1.4:处理图书注销
加工逻辑:
BEGIN
读取注销图书请求信息,当前日期和图书目录文件
IF 在图书目录文件说明该图书已经注销
THEN 输出非法注销请求信息(或者说重复注销)
ELSE 注销成功并且更新图书目录文件
END
<4: 加工2.1:学生信息查询
加工逻辑:
BEGIN
读取查询学生信息请求单,学生文件和借书文件
IF 在学生文件未找到该学生
THEN 该学生不存在
ELSE输出学生信息
END
<5: 加工2.2:图书信息查询
加工逻辑:
BEGIN
读取查询图书信息请求单,图书目录文件和借书文件
IF 在图书目录文件未找到该图书
THEN 该书不存在
ELSE输出图书信息
END
4,外部实体
<1: 名称:图书馆管理人员
描述:在图书馆管理系统中,属于主要操作对象,提供管理请求信息,查询请求信息,以及其他信息;
<2: 名称:学生
描述:在图书馆管理系统中,属于次要操作对象,提供查询请求信息
<3: 名称:系统时钟
描述:在图书馆管理系统中,系统时钟主要是提供当前的时间
C++课程设计报告
(设计题目:学生信息查询系统)
组长: 组员:
指导老师:
目录
1 课程设计目的…………………………………………………… 2 项目要求与简介………………………………………………… 3 系统实现…………………………………………………………
3.1 系统功能结构与模块划分………………………………….
3.2 数据流图……………………………………………………. 3 .3 系统采用的关键(难点)技术…………………………….
3.4 源程序清单…………………………………………………. 4 测试运行的结果…………………………………………………. 5 心得体会与进一步的改进……………………………………… 6参考书目…………………………………………………………
1 课程设计目的:
目标是使学生了解可视化程序设计语言的基础知识,掌握面向对象编程的分析设计方法,以及与面向对象技术相关的一些软件开发技术,掌握在 visualC++6环境下进行可视化程序设计技术。通过实践具体的项目,为他们进一步开展相关领域的学习和科研打下良好的基础。
2 项目要求与简介:
(1)学生信息的初始化;
(2)学生信息的修改;
(3)学生信息的查询;
(4)整理上机步骤、完成实验报告、提交可运行的程序,给出实验数据和实验结果。
3系统实现
3.1 系统功能结构与模块划分
(1) 学生信息的初始化
先定义学生的不同信息,然后初始化,进行付初值的操作。 name[15]="0",char sex[5]="0",int age=0,char adress[60]="0",float phone_number=0,float student_number=0,float
qq_number=0,char e_mail[20]="0";
(2)友元函数的声明
friend int input(Person &a);//友元 input(Person &a) 声明 friend int output(Person &a);//友元 output(Person &a) 声明 friend class Delete_person;//友元 Delete_person 声明
friend class Serch_person;//友元 Serch_person 声明
(3)新成员的注册输入
int input(Person &a)//新成员的注册
{
cout<<"请输入姓名:";
cin>>a.name[15];
cout<<endl;
cout<<"请输入性别:";
cin>>a.sex[5]; //姓名输入 //性别输入
while(a.sex=="男"&&a.sex=="女"){ cout<<"输入错误,请重新输入:"; cin>>a.sex[5];
if(a.sex=="男"||a.sex=="女") {
}
}
cout<<"请输入年龄:";
cin>>a.age;
while(a.age<=0||a.age>=100) {
cout<<"输入错误,请重新输入:"; cin>>a.age;
if(0<a.age&&a.age<100) {
cout<<endl;break; //年龄输入 cout<<endl;break;
}
}
cout<<"请输入地址:";
cin>>a.adress[60];
cout<<endl;
cout<<"请输入电话号码():";
cin>>a.phone_number;
while(a.phone_number<1000000||a.phone_number>139xxxxxxxx) {
cout<<"输入错误,请重新输入:";
cin>>a.phone_number;
if(1000000<a.phone_number&&a.phone_number<99999999999) {
}
}
cout<<"请输入学号(2010242000 ~ 2010242600):";
cin>>a.student_number;
while(a.student_number>2010242600||a.student_number<2010242000) {
cout<<"输入错误,请重新输入:";
cin>>a.student_number; //学号 cout<<endl;break; //电话 //地址输入
0)
} if(2010242000<=a.student_number&&a.phone_number<=201024260{cout<<endl; break;}
cout<<"请输入qq号码:"; cin>>a.qq_number; cout<<endl;
cout<<"输入e-mail:"; cin>>a.e_mail[20];
return 0;
(4)学生信息查询 class Serch_person
{
public:
Serch_person(); //qq号码 //e-mail
int serch_name(Person &a);
int serch_qq_number(Person &a); int serch_student_number(Person &a); int serch_phone_number(Person &a); int serch_e_mail(Person &a); int serch_age(Person &a);
private:
};
int Serch_person::serch_name(Person &a)
{
char name1[15];
int i=0;
cout<<"输入姓名:";
cin>>name1[15];
while(name1[15]!=a[i].name)
i++;
cout<<"已找到: ";
output(a[i-1]);
return 0;
}
(5)学生信息输出
int output(Person &a)//实现每个成员的信息的输出
{
cout<<"姓名"<<a.name[15]<<"性别"<<a.sex[5]<<"年龄"<<a.age<<"地址"<<a.adress[60];
cout<<"电话号码"<<a.phone_number<<"学号Person a;
"<<a.student_number<<"qq号"<<a.qq_number<<"电子邮箱"<<a.e_mail[20]<<endl;
return 0;
}
(6)学生信息删除
class Delete_person
{
public:
Delete_person();
//Delete_person(Person &a); int Delete_person_name(Person &a); int Delete_person_student_number(Person &a); int Delete_person_phone_number(Person &a); int Delete_person_qq_number(Person &a); int Delete_person_e_mail(Person &a); int Delete_person_sex(Person &a); int Delete_person_age(Person &a); int Delete_person_adress(Person &a);
// int Delete_person_everything(person &a)
// {
//
// } cout<<"此人信息已全部删除"<<endl;
~Delete_person();
private:
};
//Delete_person类定义
int Delete_person::Delete_person_age(Person &a) {
a.age=0; Person a;
return 0;
}
//int Delete_person::Delete_person_e_mail(Person &a) //{
// a.e_mail[20]="delete";
//return 0;
//}
//int Delete_person::Delete_person_name(Person &a) //{
// a.name[15]="delete";
//return 0;
//}
int Delete_person::Delete_person_phone_number(Person &a) { a.phone_number=0;
Return 0;
}
int Delete_person::Delete_person_qq_number(Person &a) { a.qq_number=0;
return 0;
}
//int Delete_person::Delete_person_sex(Person &a) //{ a.sex[5]="0";
//return 0;
//}
int Delete_person::Delete_person_student_number(Person &a) { a.student_number=0;
return 0;
}
3.2 数据流图
3.3 系统采用的关键(难点)技术
有关学生信息查询中友元函数的声明和使用和学生信息保存中数组对象的应用。
3.4 源程序清单
#include <iostream>
using namespace std;
//class Person;
//(Pervoidson a);
class Person
{
public:
//Person();
Person(char name[15]="0",char sex[5]="0",int age=0,char
adress[60]="0",float phone_number=0,float student_number=0,float qq_number=0,char
e_mail[20]="0");//管理员的成员信息初始化
Person(Person&p);
friend int input(Person &a);//友元 input(Person &a) 声明 friend int output(Person &a);//友元 output(Person &a) 声明 friend class Delete_person;//友元 Delete_person 声明
friend class Serch_person;//友元 Serch_person 声明
private:
char name[15];
char sex[5];
int age;
char adress[60];
float phone_number;
float student_number;
float qq_number;
char e_mail[20];
};
int input(Person &a)//新成员的注册 //个人信息类
{
cout<<"请输入姓名:";
cin>>a.name[15];
cout<<endl;
cout<<"请输入性别:";
cin>>a.sex[5];
while(a.sex=="男"&&a.sex=="女"){ cout<<"输入错误,请重新输入:"; cin>>a.sex[5];
if(a.sex=="男"||a.sex=="女") {
}
}
cout<<"请输入年龄:";
cin>>a.age;
while(a.age<=0||a.age>=100) {
cout<<"输入错误,请重新输入:"; cin>>a.age;
if(0<a.age&&a.age<100) { //年龄输入 cout<<endl;break; //性别输入 //姓名输入
}
} cout<<endl;break;
cout<<"请输入地址:";
cin>>a.adress[60];
cout<<endl; //地址输入
cout<<"请输入电话号码():";
cin>>a.phone_number; //电话
while(a.phone_number<1000000||a.phone_number>139xxxxxxxx) {
cout<<"输入错误,请重新输入:";
cin>>a.phone_number;
if(1000000<a.phone_number&&a.phone_number<99999999999) {
}
}
cout<<"请输入学号(2010242000 ~ 2010242600):";
cin>>a.student_number;
while(a.student_number>2010242600||a.student_number<2010242000) {
cout<<"输入错误,请重新输入:"; //学号 cout<<endl;break;
0)
} cin>>a.student_number; if(2010242000<=a.student_number&&a.phone_number<=201024260{cout<<endl; break;}
cout<<"请输入qq号码:";
cin>>a.qq_number;
cout<<endl;
cout<<"输入e-mail:";
cin>>a.e_mail[20];
return 0;
}
//输入修改函数
//qq号码 //e-mail
int output(Person &a)//实现每个成员的信息的输出
{
cout<<"姓名"<<a.name[15]<<"性别"<<a.sex[5]<<"年龄"<<a.age<<"地址"<<a.adress[60];
cout<<"电话号码"<<a.phone_number<<"学号
"<<a.student_number<<"qq号"<<a.qq_number<<"电子邮箱"<<a.e_mail[20]<<endl;
return 0;
}
//int add(Person &a)
//{
//}
class Delete_person
{
public:
Delete_person(); //Delete_person(Person &a); int Delete_person_name(Person &a); int Delete_person_student_number(Person &a); int Delete_person_phone_number(Person &a); int Delete_person_qq_number(Person &a); int Delete_person_e_mail(Person &a); int Delete_person_sex(Person &a); int Delete_person_age(Person &a); int Delete_person_adress(Person &a); //输出函数
// int Delete_person_everything(person &a) // {
//
// }
~Delete_person(); cout<<"此人信息已全部删除"<<endl;
private:
};
//Delete_person类定义
int Delete_person::Delete_person_age(Person &a) {
a.age=0; Person a;
return 0;
}
//int Delete_person::Delete_person_e_mail(Person &a) //{
// a.e_mail[20]="delete";
//return 0;
//}
//int Delete_person::Delete_person_name(Person &a) //{
// a.name[15]="delete";
//return 0;
//}
int Delete_person::Delete_person_phone_number(Person &a) { a.phone_number=0;
return 0;
}
int Delete_person::Delete_person_qq_number(Person &a) { a.qq_number=0;
return 0;
}
//int Delete_person::Delete_person_sex(Person &a) //{ a.sex[5]="0";
//return 0;
//}
int Delete_person::Delete_person_student_number(Person &a) { a.student_number=0;
return 0;
}
//Delete_person公有函数实现
//查询类,用于查询学生的信息
class Serch_person
{
public:
Serch_person(); int serch_name(Person &a); int serch_qq_number(Person &a); int serch_student_number(Person &a); int serch_phone_number(Person &a); int serch_e_mail(Person &a); int serch_age(Person &a); private:
};
int Serch_person::serch_name(Person &a) {
char name1[15];
int i=0;
cout<<"输入姓名:";
cin>>name1[15];
while(name1[15]!=a[i].name)
Person a;
i++;
cout<<"已找到: ";
output(a[i-1]);
return 0;
}
//int serch_qq_number(Person &a); //查询类,用于查询学生的信息
int main()
{
Person a[20];
//input(A);
return 0;
}
4 测试运行的结果
5 心得体会与进一步的改进
在这次编辑代码的过程中,我们小组在没有充分准备的情况下就开始了编程,导致编辑代码错误百出,至今还有一些错误没有找出,充分暴露了我们专业知识的匮乏,如友元类的声明和数组对象的应用就让我们焦头烂额。所以我们要吸取这次的教训,认真学习专业知识,争取以后能轻松的编出这样的系统。
6 参考书目
在这次编程中,我们查询了《thinking c++2》《c++ primer》等书籍。
实验报告课程名称:软件工程实验项目:实验二面向对象分析及面向对象设计实验仪器:个人电脑系别:计算机科学与技术系专业:计算机科学与技…
重庆邮电大学软件工程课程设计实验报告网上选课系统姓名雷雷学号专业计算机科学与技术班级0410801指导老师邹洋教室S331A时间一…
大学图书馆图书信息管理系统实验报告学校宁波广播电视大学班级10春计算机科学与技术姓名学号一编写目的根据需求调研分析报告定义系统功能…
实验一一实验室名称综合实验楼二试验项目名称图书管理系统三实验目的1了解和使用甘特图系统流程图线性时间图来描绘系统开发流程和进度2学…
软件工程实验报告实验题目:实验室设备管理系统1、系统简介:每天对实验室设备使用情况进行统计,对于已彻底损坏的作报废处理,同时详细记…
题目:广州御剑网络科技有限公司实习报告目录1前言.........................................…
软件助理工程师岗位的实习报告姓名:专业班级:10级软件技术(英语)实习单位:埃森哲信息技术(大连)有限公司指导教师:完成日期:20…
学号:在这个学期的软件工程实践课中,我们小组所选的题目为XXX公司全国销售管理系统。按照这个题目及相关需求,我们小组对选题进行了需…
实习总结光阴荏苒,时光飞逝,转眼间到了实习结束的日子。从进公司实习到现在,我已经到公司近6个月了,感受颇多,收获颇多。期间,通过公…
初涉社会新的转变——关于暑期实习的实践报告摘要本人于20xx年x月x日至12月x日,在广州佳都新太科技股份有限公司参加了企业实习。…
项目开发总结报告(PDSR)目录项目开发总结报告(PDSR)...................................…