用C语言设计一个学生一卡通账户系统 主要功能:开户、注销、存款、查询、修改个人信息 系统功能说明:用户信息存在一个二进制或文本文件中,个人账户信息包括:卡号、姓名、身份证号或学号、手机号码、专业、登录密码(字母、数字的组合,至少8-16位
时间: 2023-09-05 18:09:13 浏览: 46
好的,下面是一个简单的学生一卡通账户系统的 C 语言代码,包括开户、注销、存款、查询和修改个人信息等功能:
```c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAX_USERS 100 // 最大用户数
#define FILE_NAME "users.txt" // 存储用户信息的文件名
struct User {
int card_number; // 卡号
char name[20]; // 姓名
char id_number[20]; // 身份证号或学号
char phone_number[20]; // 手机号码
char major[20]; // 专业
char password[20]; // 登录密码
double balance; // 余额
};
struct User users[MAX_USERS]; // 存储所有用户的结构体数组
int num_users = 0; // 当前用户数
// 从文件中读取所有用户信息到内存中
void read_users() {
FILE *fp = fopen(FILE_NAME, "rb");
if (fp == NULL) {
return;
}
num_users = 0;
while (fread(&users[num_users], sizeof(struct User), 1, fp) == 1) {
num_users++;
}
fclose(fp);
}
// 将所有用户信息写入文件
void write_users() {
FILE *fp = fopen(FILE_NAME, "wb");
if (fp == NULL) {
printf("Unable to open file.\n");
exit(1);
}
for (int i = 0; i < num_users; i++) {
fwrite(&users[i], sizeof(struct User), 1, fp);
}
fclose(fp);
}
// 根据卡号查找用户在数组中的下标
int find_user_by_card_number(int card_number) {
for (int i = 0; i < num_users; i++) {
if (users[i].card_number == card_number) {
return i;
}
}
return -1;
}
// 开户
void create_account() {
if (num_users >= MAX_USERS) {
printf("No more users can be created.\n");
return;
}
struct User user;
printf("Please enter your name: ");
scanf("%s", user.name);
printf("Please enter your ID number or student ID: ");
scanf("%s", user.id_number);
printf("Please enter your phone number: ");
scanf("%s", user.phone_number);
printf("Please enter your major: ");
scanf("%s", user.major);
printf("Please enter your login password (at least 8-16 characters, consisting of letters and numbers): ");
scanf("%s", user.password);
while (strlen(user.password) < 8 || strlen(user.password) > 16) {
printf("Password must be at least 8-16 characters long, consisting of letters and numbers. Please enter again: ");
scanf("%s", user.password);
}
// 生成唯一的卡号
user.card_number = num_users + 1;
user.balance = 0;
users[num_users++] = user;
printf("Account created successfully. Your card number is %d.\n", user.card_number);
write_users();
}
// 注销
void delete_account() {
int card_number;
printf("Please enter your card number: ");
scanf("%d", &card_number);
int index = find_user_by_card_number(card_number);
if (index == -1) {
printf("User not found.\n");
return;
}
printf("Are you sure you want to delete your account? (y/n) ");
char choice;
scanf(" %c", &choice);
if (choice == 'y' || choice == 'Y') {
for (int i = index; i < num_users - 1; i++) {
users[i] = users[i + 1];
}
num_users--;
printf("Account deleted successfully.\n");
write_users();
} else {
printf("Account not deleted.\n");
}
}
// 存款
void deposit() {
int card_number;
printf("Please enter your card number: ");
scanf("%d", &card_number);
int index = find_user_by_card_number(card_number);
if (index == -1) {
printf("User not found.\n");
return;
}
double amount;
printf("Please enter the amount to be deposited: ");
scanf("%lf", &amount);
if (amount <= 0) {
printf("Invalid amount.\n");
return;
}
users[index].balance += amount;
printf("Deposit successful. Your current balance is %.2lf.\n", users[index].balance);
write_users();
}
// 查询
void inquire() {
int card_number;
printf("Please enter your card number: ");
scanf("%d", &card_number);
int index = find_user_by_card_number(card_number);
if (index == -1) {
printf("User not found.\n");
return;
}
printf("Name: %s\n", users[index].name);
printf("ID number or student ID: %s\n", users[index].id_number);
printf("Phone number: %s\n", users[index].phone_number);
printf("Major: %s\n", users[index].major);
printf("Balance: %.2lf\n", users[index].balance);
}
// 修改个人信息
void modify() {
int card_number;
printf("Please enter your card number: ");
scanf("%d", &card_number);
int index = find_user_by_card_number(card_number);
if (index == -1) {
printf("User not found.\n");
return;
}
printf("Please enter your new name (or press enter to keep the old name): ");
char name[20];
scanf("%s", name);
if (strlen(name) > 0) {
strcpy(users[index].name, name);
}
printf("Please enter your new ID number or student ID (or press enter to keep the old ID number or student ID): ");
char id_number[20];
scanf("%s", id_number);
if (strlen(id_number) > 0) {
strcpy(users[index].id_number, id_number);
}
printf("Please enter your new phone number (or press enter to keep the old phone number): ");
char phone_number[20];
scanf("%s", phone_number);
if (strlen(phone_number) > 0) {
strcpy(users[index].phone_number, phone_number);
}
printf("Please enter your new major (or press enter to keep the old major): ");
char major[20];
scanf("%s", major);
if (strlen(major) > 0) {
strcpy(users[index].major, major);
}
printf("Personal information modified successfully.\n");
write_users();
}
int main() {
read_users();
int choice;
do {
printf("\n1. Create account\n");
printf("2. Delete account\n");
printf("3. Deposit\n");
printf("4. Inquire\n");
printf("5. Modify personal information\n");
printf("6. Exit\n");
printf("Please select an operation (1-6): ");
scanf("%d", &choice);
switch (choice) {
case 1:
create_account();
break;
case 2:
delete_account();
break;
case 3:
deposit();
break;
case 4:
inquire();
break;
case 5:
modify();
break;
case 6:
printf("Goodbye!\n");
break;
default:
printf("Invalid choice.\n");
break;
}
} while (choice != 6);
return 0;
}
```
注意,由于本程序是一个简单的练习示例,没有进行严格的输入验证和错误处理。在实际开发中,需要根据实际情况增加更多的错误处理和安全性保护。