C语言通用性强的链表写一个银行管理系统用文件io
时间: 2023-05-28 09:07:37 浏览: 280
以下是一个简单的银行管理系统,使用链表实现数据存储,并使用文件IO来保存和读取数据。
```c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
// 银行账户结构体
typedef struct bank_account {
int account_number; // 账户号码
char name[20]; // 姓名
double balance; // 余额
struct bank_account *next; // 指向下一个账户的指针
} BankAccount;
// 全局变量,指向链表的头节点
BankAccount *head = NULL;
// 添加账户
void add_account() {
BankAccount *new_account = (BankAccount*) malloc(sizeof(BankAccount));
printf("请输入账户号码:");
scanf("%d", &new_account->account_number);
printf("请输入账户姓名:");
scanf("%s", new_account->name);
printf("请输入账户余额:");
scanf("%lf", &new_account->balance);
// 将新账户插入到链表头部
new_account->next = head;
head = new_account;
printf("账户添加成功\n");
}
// 删除账户
void delete_account() {
int account_number;
printf("请输入要删除的账户号码:");
scanf("%d", &account_number);
BankAccount *current = head;
BankAccount *previous = NULL;
while (current != NULL) {
if (current->account_number == account_number) {
if (previous == NULL) {
head = current->next;
} else {
previous->next = current->next;
}
free(current);
printf("账户删除成功\n");
return;
}
previous = current;
current = current->next;
}
printf("找不到指定账户\n");
}
// 显示所有账户信息
void show_accounts() {
BankAccount *current = head;
while (current != NULL) {
printf("账户号码:%d,账户姓名:%s,账户余额:%.2lf\n",
current->account_number, current->name, current->balance);
current = current->next;
}
}
// 保存账户数据到文件
void save_accounts() {
FILE *fp = fopen("accounts.dat", "wb");
if (fp == NULL) {
printf("无法创建文件\n");
return;
}
BankAccount *current = head;
while (current != NULL) {
fwrite(current, sizeof(BankAccount), 1, fp);
current = current->next;
}
fclose(fp);
printf("账户数据保存成功\n");
}
// 从文件中加载账户数据
void load_accounts() {
FILE *fp = fopen("accounts.dat", "rb");
if (fp == NULL) {
printf("无法打开文件\n");
return;
}
BankAccount *current = NULL;
BankAccount *previous = NULL;
while (!feof(fp)) {
current = (BankAccount*) malloc(sizeof(BankAccount));
if (fread(current, sizeof(BankAccount), 1, fp) != 1) {
free(current);
break;
}
current->next = NULL;
if (previous == NULL) {
head = current;
} else {
previous->next = current;
}
previous = current;
}
fclose(fp);
printf("账户数据加载成功\n");
}
// 主函数
int main() {
int choice;
// 从文件中加载账户数据
load_accounts();
while (1) {
printf("请选择操作:\n");
printf("1. 添加账户\n");
printf("2. 删除账户\n");
printf("3. 显示所有账户信息\n");
printf("4. 保存账户数据到文件\n");
printf("5. 退出\n");
printf("请选择操作:");
scanf("%d", &choice);
switch (choice) {
case 1: // 添加账户
add_account();
break;
case 2: // 删除账户
delete_account();
break;
case 3: // 显示所有账户信息
show_accounts();
break;
case 4: // 保存账户数据到文件
save_accounts();
break;
case 5: // 退出
printf("再见!\n");
return 0;
default:
printf("无效的选择\n");
break;
}
}
return 0;
}
```
在这个程序中,我们定义了一个银行账户结构体,其包含账户号码、姓名和余额。我们使用了一个全局变量 `head` 来存储链表的头节点,我们可以通过它来遍历整个链表。我们实现了添加、删除、显示和保存账户数据的功能,其中保存和加载账户数据使用了文件IO操作,将数据保存到 `accounts.dat` 文件中。
注意,由于银行账户的数据可能很敏感,因此在实际场景中,我们需要采取更加复杂的安全措施来保护数据的安全性。此外,我们在这个程序中只实现了最基本的功能,实际的银行管理系统需要更加复杂的功能和逻辑。
阅读全文