【数据结构】线性数据结构的实现与应用

一、实验目的

          1. 掌握线性表的双链表实现。
          2. 掌握线性表的应用:活期储蓄帐目管理系统。

二、实验内容

        1. 基于双链表实现线性表的典型操作(判空、插入、删除、查找、修改、普通构造、拷贝构造、赋值运算符重载、析构),编写简单程序使用该线性表,测试和调试程序。
        2. 基于双链表实现线性表的应用:银行账户管理,测试和调试程序。
        3. 按要求撰写实验报告、录制程序运行以及讲解程序的视频。 报告中要包含算法性能的讨论以及根据实现效率在问题的多种解决方案中进行比较、选择的说明。

三、实验设备

        计算机、Windows 操作系统、C++语言集成开发环境。

四、实验原理

        详细流程图可点击下方链接。https://download.csdn.net/download/qq_47504614/20924011

五、实验源代码

         核心代码就是下面这些,还有很多辅助型代码,可以点此链接下载哦!!!https://download.csdn.net/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
 

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

qq_47504614

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值