一、实验目的
1. 掌握线性表的双链表实现。
2. 掌握线性表的应用:活期储蓄帐目管理系统。
二、实验内容
1. 基于双链表实现线性表的典型操作(判空、插入、删除、查找、修改、普通构造、拷贝构造、赋值运算符重载、析构),编写简单程序使用该线性表,测试和调试程序。
2. 基于双链表实现线性表的应用:银行账户管理,测试和调试程序。
3. 按要求撰写实验报告、录制程序运行以及讲解程序的视频。 报告中要包含算法性能的讨论以及根据实现效率在问题的多种解决方案中进行比较、选择的说明。
三、实验设备
计算机、Windows 操作系统、C++语言集成开发环境。
四、实验原理
详细流程图可点击下方链接。https://download.youkuaiyun.com/download/qq_47504614/20924011
五、实验源代码
核心代码就是下面这些,还有很多辅助型代码,可以点此链接下载哦!!!https://download.youkuaiyun.com/download/qq_47504614/20924011
/*********************************
活期储蓄账目管理系统
(用户信息的增删改查,永久性存储)
**********************************/
class User
{
public:
//默认构造
User();
//有参构造 参数(账号 姓名 身份证号 电话 余额)
User(string empId, string name,long long m_Id,int phone,double excess);
//开户
void open_Account(List<User>&, User&);
//销户
void close_Account(List<User>&, User&);
//存款
void deposit_Money(List<User>&, User&,const string&,string&);
//取款
void draw_Money(List<User>&, User&, const string&,string&);
//查询余额
void check_Excess(List<User>&, User&);
//查询交易明细
void check_Details(List<User>&, User&, const string&);
//永久性存储
void permanent_Storage(List<User>&, User&);
string empId; //账户
string name; //姓名
long long m_Id; //身份证号
int phone; //电话
double excess; //余额
};
#include "user.h"
#include "List.h"
#include "file.h"
#include <fstream>
#include <time.h>
#include <windows.h>
#include<stdlib.h>
//用户文件
#define USER_FILE "user.txt"
#define DETAIL_FILE "detail.txt"
string user_fileName = USER_FILE;
string deta_fileName = DETAIL_FILE;
//默认构造
User::User()
{
}
//有参构造 参数(账号 姓名 身份证号 电话 余额)
User::User(string empId, string name, long long m_Id, int phone, double excess)
{
this->empId = empId;
this->name = name;
this->m_Id = m_Id;
this->phone = phone;
this->excess = excess;
}
//开户
void User::open_Account(List<User>& c_list, User& user)
{
write_txt(user_fileName,user); //将开户的用户信息存到文件
c_list.insert(c_list.size(), user); //将开户的用户插入线性表
cout << "您的账号是" << empId << "余额是" << 0 << endl;
system("pause"); //清屏
system("cls");
}
//销户
void User::close_Account(List<User>& c_list, User& user)
{
del(user_fileName, user,c_list); //将用户信息从文件中删除
c_list.remove(atoi(empId.c_str())-1, user); //将用户从线性表中删除
system("pause");
system("cls");
}
//存款
void User::deposit_Money(List<User>& c_list, User& user,const string& file, string& state)
{
char s[] = "存款";
state = s;
edit(user_fileName, user, c_list,state); //修改余额,并存入文件
c_list.replace(atoi(empId.c_str())-1, user); //修改线性表中的余额
//以下完成 交易明细写入文件 的操作
ofstream ofs; //文件操作对象
ofs.open(deta_fileName, ios::out | ios::app);
//获取系统时间(年月日,时分秒)
SYSTEMTIME sys;
GetLocalTime(&sys);
//将交易账户、交易类型、交易金额、交易时间写入交易明细文件
ofs <<"账号: " << empId << " 交易类型: " << state<<" 交易金额: "<<excess << "元"
<< " 交易时间: " << sys.wYear << "/" << sys.wMonth << "/" << sys.wDay << "/" << " " <<
sys.wHour << ":" << sys.wMinute << ":" << sys.wSecond << endl;
system("pause");
system("cls");
}
//取款
void User::draw_Money(List<User>& c_list, User& user,const string& file,string& state)
{
char s[] = "取款";
state = s;
edit(user_fileName, user, c_list,state); //修改余额,并存入文件
c_list.replace(atoi(empId.c_str()) - 1, user); //修改线性表中的余额
//以下完成 交易明细写入文件 的操作
ofstream ofs; //文件操作对象
ofs.open(deta_fileName, ios::out | ios::app);
//获取系统时间(年月日,时分秒)
SYSTEMTIME sys;
GetLocalTime(&sys);
//将交易账户、交易类型、交易金额、交易时间写入交易明细文件
ofs << "账号: " << empId << " 交易类型: " << state << " 交易金额: " << excess << "元"
<< " 交易时间: " << sys.wYear << "/" << sys.wMonth << "/" << sys.wDay << "/" << " " <<
sys.wHour << ":" << sys.wMinute << ":" << sys.wSecond << endl;
system("pause");
system("cls");
}
//查询余额
void User::check_Excess(List<User>& c_list, User& user)
{
searchUser(user_fileName); //查询用户余额,并显示该用户信息
system("pause");
system("cls");
}
//查询交易明细
void User::check_Details(List<User>& c_list, User& user, const string& file)
{
searchDetail(deta_fileName); //查询用户的历次交易明细
system("pause");
system("cls");
}
//永久性存储
void User::permanent_Storage(List<User>& c_list, User& user)
/*
程序运行时,从文件中读入用户信息插入线性表,显示交易明细
*/
{
ifstream ifs1; //用户文件操作对象
ifs1.open(user_fileName, ios::in);
ifstream ifs2; //交易明细文件操作对象
ifs2.open(deta_fileName, ios::in);
string empId;
string name;
long long m_Id;
int phone = 0;
double excess = 0;
//从文件中读入用户的账号 姓名 身份证号 联系方式 余额
while (ifs1 >> empId && ifs1 >> name && ifs1 >> m_Id && ifs1 >> phone && ifs1 >> excess)
{
user.empId = empId;
user.name = name;
user.m_Id = m_Id;
user.phone = phone;
user.excess = excess;
c_list.insert(c_list.size(), user); //插入线性表
}
char str2[100];
while (ifs2.getline(str2, 100))//得到一行交易明细
{
string s = str2;
cout << s << endl; //输出交易明细
}
system("pause");
system("cls");
}
六、实验结果
用户信息文件如下:
000001 张三 123456789987654321 12345 500
000003 王五 567899876556789567 123456 3000
000004 赵六 987655678998765567 98765 5000
交易明细文件如下:
账号: 000001 交易类型: 存款 交易金额: 1000元 交易时间: 2021/7/10/ 19:17:31
账号: 000003 交易类型: 存款 交易金额: 3000元 交易时间: 2021/7/10/ 19:17:59
账号: 000004 交易类型: 存款 交易金额: 5000元 交易时间: 2021/7/10/ 19:18:15
账号: 000001 交易类型: 取款 交易金额: 500元 交易时间: 2021/7/10/ 19:18:58
账号: 000002 交易类型: 取款 交易金额: 0元 交易时间: 2021/7/10/ 19:19:31