软件工程综合实践专题第1次作业
软件工程综合实践专题第1次作业(17软工二班茅杭斌1759230)
我这次拿到的软件的主要是一个简单的图书馆图书管理软件,是拿同学上学期的大作业来进行理解分析的。
一、源代码:
#include<iostream>
#include<fstream>
#include<string>
using namespace std;
class Book
{
public:
string name;
string num;
int count;
};
Book book[60];
static int asize=50;
void scan()
{
ifstream fin("E:\\程序\\Project1\\book.txt", ios::in);
if (fin)
cout << "文件打开成功" << endl;
else
cout << "文件打开失败" << endl;
int i;
for (i = 0; i < asize; i++)
fin >> book[i].name >>book[i].num >> book[i].count;
fin.close();
}
int save()
{
ofstream fout("E:\\程序\\Project1\\book.txt", ios::out);
int i;
if (fout)
{
cout << "文件打开成功" << endl;
for (i = 0; i < asize; i++)
fout << book[i].name << '\t' << book[i].num << '\t' << book[i].count << endl;
return 1;
}
else
{
cout << "文件打开失败" << endl;
return 0;
}
fout.close();
}
void display()
{
int i;
for (i = 0; i < asize; i++)
cout << book[i].name << '\t' << book[i].num << '\t' << book[i].count << endl;
}
void add()
{
string name1, a;
int n;
cout << "输入你要添加的书名:";
cin >> name1;
cout << "输入你要添加的书号:";
cin >> a;
cout << "输入你要添加的数量:";
cin >> n;
asize++;
book[asize].name = name1;
book[asize].num = a;
book[asize].count = n;
cout << book[asize].name << '\t' << book[asize].num << '\t' << book[asize].count << endl;
if (save())
{
display();
cout << "添加成功" << endl;
}
else
cout << "添加失败" << endl;
fflush(stdin);
}
void borrow()
{
int n = 1, i=0;
string a;
cout << "请输入借书名称或书号:";
cin >> a;
while (i <= asize)
{
if (a == book[i].name)
{
cout << "是否借阅该图书:\n1---借阅\n2---不借阅\n";
cin >> n;
if (n == 1)
{
book[i].count--;
cout << "借阅成功" << endl;
cout << book[i].name << '\t' << book[i].num << '\t' << book[i].count << endl;
break;
}
else
{
cout << "借阅失败" << endl;
break;
}
}
else if (a == book[i].num)
{
cout << "是否借阅该图书:\n1---借阅\n2---不借阅\n";
cin >> n;
if (n == 1)
{
book[i].count--;
cout << "借阅成功" << endl;
cout << book[i].name << '\t' << book[i].num << '\t' << book[i].count << endl;
break;
}
else
{
cout << "借阅失败" << endl;
break;
}
}
i++;
}
if (i>asize)
{
cout << "没有找到该图书!" << endl;
}
if (save())
cout << "储存成功" << endl;
else
cout << "储存失败" << endl;
fflush(stdin);
}
void back()
{
int n = 1, i=0;
string a;
cout << "请输入还书名称或书号:";
cin >> a;
while (i <= asize)
{
if (a == book[i].name)
{
cout << "是否归还该图书:\n1---归还\n2---不归还\n";
cin >> n;
if (n == 1)
{
book[i].count++;
cout << "归还成功" << endl;
cout << book[i].name << '\t' << book[i].num << '\t' << book[i].count << endl;
break;
}
else
{
cout << "归还失败" << endl;
break;
}
}
else if (a == book[i].num)
{
cout << "是否归还该图书:\n1---归还\n2---不归还\n";
cin >> n;
if (n == 1)
{
book[i].count++;
cout << "归还成功" << endl;
cout << book[i].name << '\t' << book[i].num << '\t' << book[i].count << endl;
break;
}
else
{
cout << "归还失败" << endl;
break;
}
}
i++;
}
if (i>asize)
{
cout << "没有找到该图书!" << endl;
}
if (save())
cout << "储存成功" << endl;
else
cout << "储存失败" << endl;
fflush(stdin);
}
void search()
{
void searchname();
void searchnum();
int n;
cout << "1---按书名查询\n2---按书号查询" << endl;
cin >> n;
switch (n)
{
case 1:searchname(); break;
case 2:searchnum(); break;
default: cout << "输入有误" << endl; break;
}
}
void searchname()
{
int i, flag;
string str;
cout << "请输入要查询的书名:";
cin >> str;
for (i = 0; i<asize; i++)
{
if (book[i].name == str)
{
flag = 1;
break;
}
else
flag = 0;
}
if (flag)
cout << book[i].name << '\t' << book[i].num << '\t' << book[i].count << endl;
else
cout << "查询错误!" << endl;
}
void searchnum()
{
int i, flag;
string str;
cout << "请输入要查询的书号:";
cin >> str;
for (i = 0; i<asize; i++)
{
if (book[i].num == str)
{
flag = 1;
break;
}
else
flag = 0;
}
if (flag)
cout << book[i].name << '\t' << book[i].num << '\t' << book[i].count << endl;
else
cout << "查询错误!" << endl;
}
void exam()
{
string user;
string sec;
cout << "请登陆:" << endl;
cout << "用户名:";
cin >> user;
cout << "密码:";
cin >> sec;
if (user == "abc")
{
if (sec == "123")
{
cout << "登陆成功!" << endl;
int n = 1;
while (n != 0)
{
cout << "1---订购新书\n2---显示所有图书\n3---借阅功能\n4---还书功能\n5---查询功能\n0---退出\n请选择:";
cin >> n;
switch (n)
{
case 1:add(); break;
case 2:display(); break;
case 3:borrow(); break;
case 4:back(); break;
case 5:search(); break;
case 0: break;
default: cout << "输入有误" << endl; break;
}
}
}
else
{
cout << "密码错误!" << endl;
}
}
else
{
cout << "用户名错误!" << endl;
}
}
int main()
{
scan();
exam();
system("pause");
return 0;
}
二、代码分析
该程序定义了book类,又定义了scan()、save()、display()、add()、borrow()、back()、search()、searchname()、searchnum()、exam()等方法,通过实现这些方法来达到不同功能的实现。
scan()方法来实现对一个text文件的打开操作。
save()方法来实现存储输入的图书信息。
dispaly()方法来实现显示所有图书的信息。
add()方法来实现录入订购新图书的信息。
borrow()方法来实现借阅图书功能。
back()方法来实现还书功能。
search()方法来实现查询图书功能,searchname()和searchnum()是查询功能的延伸。
exam()方法来实现该软件的登录功能。
三、运行
1.如果输入错误的账号密码
2.如果输入正确的账号密码
3.功能1
4.功能2
5.功能3
6.功能4
7.功能5
8.退出
四、心得体会
这个程序的运行还是比较简单的,通过定义多个方法并调用实现功能。各功能的关联做的比较好,对于使用者来说是比较方便的。在代码的检验过程中,基本上没什么错误,因为是拷过来的代码,所以在text文件的打开地址上需要修改一下。最后也能完美的运行。