C語言課程設計
阿新 • • 發佈:2021-01-16
技術標籤:c語言
C語言課程設計作業
大約有500行程式碼,運用了檔案,結構,函式等知識,僅供參考。
我學習C語言時間也不是很長,可能其中有些錯誤,請小夥伴們多注意哦。
C語言是學習其他語言的基礎,下學期學習C++也會有課程設計,完成之後會發出來給小夥伴們參考一下的。
程式碼函式我都做了註釋,方便理解。
```/*銀行儲蓄業務系統*/
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
void Welcome(); /*歡迎介面*/
void Login(); /*登入*/
void Mainmenu(); /*主選單*/
void Query(); /*查詢餘額*/
void DisplayAccount(int count); /*賬戶狀態*/
void OpenAccount(); /*開戶*/
void CloseAccount(); /*銷戶*/
void Deposit(); /*存款*/
void Withdraw(); /*取款*/
void Losecard(); /*掛失*/
void Opencard(); /*解掛*/
void TransferAccounts(); /*轉賬*/
struct user {
int id;
char userName[10];//使用者名稱
char userPassword[10];//密碼
float money;
int status;// 狀態 1:正常 2. 掛失 0:銷戶
} users[60]; //結構陣列(所有使用者的個人資訊)
//全域性變數
int number=0; // 記錄編號和已經新增的使用者人數
FILE *fp;
int main(void) {
int choose, n=5;
//歡迎介面
Welcome();
//登入
Login();
do {
/*主選單*/
Mainmenu();
printf("請選擇您要辦理的業務:");
scanf("%d",&choose);
switch(choose) {
case 1:
Deposit();
break;//存款
case 2:
Withdraw();
break;//取款
case 3:
Query();
break;//查詢
case 4:
OpenAccount();
break;//開戶
case 5:
CloseAccount();
break;//銷戶
case 6:
TransferAccounts();
break;//轉賬
case 7:
Losecard();
break;//掛失
case 8:
Opencard();
break;//解除掛失
}
} while(choose!=0);
if(choose==0) {
printf("感謝您使用銀行儲蓄業務管理系統,歡迎下次繼續使用!\n");
}
}
//展示賬戶狀態
void DisplayAccount(int count) {
printf("\t|------------------------------------|\n");
printf("\t|-**********************************-|\n");
printf("\t\t賬號:%d\n",users[count].id);
printf("\t\t使用者名稱:%s\n",users[count].userName);
printf("\t\t密碼:%s\n",users[count].userPassword);
printf("\t\t餘額:%.2f\n",users[count].money);
printf("\t\t賬戶狀態:");
if(users[count].status == 1)
printf("正常\n");
if(users[count].status == 2)
printf("掛失\n");
else if(users[count].status == 0)
printf("銷戶\n");
printf("\t|-**********************************-|\n");
printf("\t|------------------------------------|\n");
}
//歡迎介面
void Welcome() {
printf("\t|------------------------------------|\n");
printf("\t|-¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥-|\n");
printf("\t|----------銀行儲蓄業務系統----------|\n");
printf("\t|************************************|\n");
printf("\t|------------版本:V1.0--------------|\n");
printf("\t|--------開發時間:2020-12-3---------|\n");
printf("\t|-¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥¥-|\n");
printf("\t|------------------------------------|\n");
}
//登入
void Login() {
int count=0;
char username[10],password[10];
do {
printf("請輸入管理員名:");
gets(username);
printf("請輸入管理員密碼:");
gets(password);
if(((strcmp(username,"admin")))==0&&((strcmp(password,"123456"))==0)) {
printf(" 正在登陸,請稍等\n");
printf("■■■■■■■■■■■■■■■■■■■■\n");
printf("登入成功!\n");
break;
} else {
printf("管理員名或密碼錯誤.\n");
printf("請重新輸入管理員名或密碼.\n");
count++;
}
} while(count<=3);
if(count>3) {
printf("登入失敗,請及時聯絡銀行工作人員!");
}
}
/*主選單*/
void Mainmenu() {
printf("\t|------------------------------------|\n");
printf("\t|-**********************************-|\n");
printf("\t|---------------主選單---------------|\n");
printf("\t|--存款<1>--&--開戶<4>--&--掛失<7>---|\n");
printf("\t|------------------------------------|\n");
printf("\t|--取款<2>--&--銷戶<5>--&--解掛<8>---|\n");
printf("\t|------------------------------------|\n");
printf("\t|--查詢<3>--&--轉賬<6>--&--退出<0>---|\n");
printf("\t|------------------------------------|\n");
printf("\t|-**********************************-|\n");
printf("\t|------------------------------------|\n");
}
//查詢餘額
void Query() {
int id;
printf("請輸入所要查詢的使用者賬戶:");
scanf("%d",&id);
if((fp=fopen("users.txt","r+"))==NULL) {
printf("File open error!");
exit(0);
}
while(fscanf(fp,"%d %s %s %f %d",&users[id].id,users[id].userName,users[id].userPassword,&users[id].money,&users[id].status)==5) {
if(id==users[id].id) {
break;
}
}
if(fclose(fp)) {
printf("Can not close the file!\n");
exit(0);
}
if(users[id].status==0) { //判斷使用者狀態
printf("該賬號已銷戶,無法進行查詢操作.\n");
} else { //不是銷戶狀態下
char pwd1[10];
printf("請輸入所要查詢的賬戶名所對應密碼:");
scanf("%s",pwd1);
if(strcmp(pwd1,users[id].userPassword)==0)//比較密碼與使用者名稱是否匹配
DisplayAccount(id);
else
printf("您的賬號或密碼有誤,無法進行查詢,請重新進行操作\n");
}
}
//存款
void Deposit() {
FILE *temp;
int i=0;
printf("請輸入所要存款的賬號:");
int id;
scanf("%d",&id);
if((fp=fopen("users.txt","r+"))==NULL) {
printf("File open error!");
exit(0);
}
while(fscanf(fp,"%d %s %s %f %d",&users[id].id,users[id].userName,users[id].userPassword,&users[id].money,&users[id].status)==5) {
if(id==users[id].id) {
break;
}
}
if(users[id].status == 1) {
char um[10];
printf("請輸入所要存款的使用者名稱:");
scanf("%s",um);
char pwd[10];
printf("請輸入所要存款賬號的密碼:");
scanf("%s",pwd);
if(strcmp(um,users[id].userName)==0&&strcmp(pwd,users[id].userPassword)==0) {
printf("請輸入存款金額:");
float money,money2;
scanf("%f",&money);
users[id].money+=money;
money2=users[id].money;
temp=fopen("temp.txt","w");
rewind(fp);//回到fp所指檔案內容開頭
while(fscanf(fp,"%d %s %s %f %d",&users[i].id,users[i].userName,users[i].userPassword,&users[i].money,&users[i].status)==5) {
if(strcmp(um,users[i].userName)==0&&strcmp(pwd,users[i].userPassword)== 0) {
fprintf(temp,"%d %s %s %f %d\n",users[i].id,users[i].userName,users[i].userPassword,money2,users[i].status);
users[id].money=money2;
} else
fprintf(temp,"%d %s %s %f %d\n",users[i].id,users[i].userName,users[i].userPassword,users[i].money,users[i].status);
i++;
}
if(fclose(fp)) {
printf("Can not close the file!\n");
exit(0);
}
if(fclose(temp)) {
printf("Can not close the file!\n");
exit(0);
}
remove("users.txt");//刪除users檔案
rename("temp.txt","users.txt");//重新命名temp檔案
printf("存款已完成!\n");
DisplayAccount(id);
} else printf("您的使用者名稱或密碼有誤,無法存款,請重新進行操作\n");
} else if(users[id].status==2) {
printf("該賬號已掛失,無法進行存款操作!\n");
} else if(users[id].status==0) {
printf("該賬號已銷戶,無法進行存款操作!\n");
printf("您是否選擇開戶操作:Yes<1> No<2>\n");
int choose;
scanf("%d",&choose);
if(choose==1) {
OpenAccount();
}
}
}
//取款
void Withdraw() {
FILE *temp;
int i=0;
printf("請輸入所要取款的賬號:");
int id;
scanf("%d",&id);
if((fp=fopen("users.txt","r+"))==NULL) {
printf("File open error!");
exit(0);
}
while(fscanf(fp,"%d %s %s %f %d",&users[id].id,users[id].userName,users[id].userPassword,&users[id].money,&users[id].status)==5) {
if(id==users[id].id) {
break;
}
}
if(users[id].status == 1) {
char um[10];
printf("請輸入所要取款的使用者名稱:");
scanf("%s",um);
char pwd[10];
printf("請輸入所要取款賬號的密碼:");
scanf("%s",pwd);
if(strcmp(um,users[id].userName)==0&&strcmp(pwd,users[id].userPassword)==0) {
printf("請輸入取款金額:");
float money,money2;
scanf("%f",&money);
if(users[id].money>=money) {
users[id].money-=money;
money2=users[id].money;
temp=fopen("temp.txt","w");
rewind(fp);//回到fp所指檔案內容開頭
while(fscanf(fp,"%d %s %s %f %d",&users[i].id,users[i].userName,users[i].userPassword,&users[i].money,&users[i].status)==5) {
if(strcmp(um,users[i].userName)==0&&strcmp(pwd,users[i].userPassword)== 0) {
fprintf(temp,"%d %s %s %f %d\n",users[i].id,users[i].userName,users[i].userPassword,money2,users[i].status);
users[id].money=money2;
} else
fprintf(temp,"%d %s %s %f %d\n",users[i].id,users[i].userName,users[i].userPassword,users[i].money,users[i].status);
i++;
}
if(fclose(fp)) {
printf("Can not close the file!\n");
exit(0);
}
if(fclose(temp)) {
printf("Can not close the file!\n");
exit(0);
}
remove("users.txt");//刪除users檔案
rename("temp.txt","users.txt");//重新命名temp檔案
printf("您取款後的狀態為:\n");
DisplayAccount(id);
} else
printf("您的金額已不足!\n");
} else
printf("您的使用者名稱或密碼有誤,無法存款,請重新進行操作\n");
} else if(users[id].status==2) {
printf("該賬號已掛失,無法進行取款操作\n");
} else if(users[id].status==0) {
printf("該賬號已銷戶,無法進行取款操作\n");
}
}
//開戶
void OpenAccount() {
int i,flag=0;
char pwd1[7],pwd2[7];
char name[10];
if((fp=fopen("users.txt","r+"))==NULL) {
fp=fopen("users.txt","w+");
//printf("File open error!\n");
//exit(0);
}
while(fscanf(fp,"%d %s %s %f %d",&number,name,pwd1,&users[number].money,&users[number].status)==5) {
number++;
}
printf("歡迎使用開戶模組!\n");
printf("請輸入您的使用者名稱:");
scanf("%s",name);
for(i=1; i<number; i++) {
if(strcmp(users[i].userName,name)==0) {
printf("您輸入的使用者名稱已經存在,請重新輸入:");
scanf("%s",name);
break;
}
}
if(i==number) {
printf("您申請的使用者名稱成功!\n");
}
strcpy(users[number].userName,name);
printf("請輸入您的密碼(6位數字):");
scanf("%s",pwd1);
printf("請再次輸入您的密碼進行確認:");
scanf("%s",pwd2);
if(strcmp(pwd1,pwd2)==0) {
printf("開戶成功!\n");
strcpy(users[number].userPassword,pwd1);
printf("請輸入您要存款的金額:");
scanf("%f",&users[number].money);
users[number].status=1;
fprintf(fp,"%d %s %s %f %d\n",number,name,pwd1,users[number].money,users[number].status);
if(fclose(fp)) {
printf("Can not close the file!\n");
exit(0);
}
printf("您的賬戶資訊為:\n");
users[number].id=number;
DisplayAccount(number);
} else {
printf("開戶失敗,請檢查錯誤後,重新進行操作\n");
number--;
}
return;
}
//銷戶
void CloseAccount() {
FILE *temp;
int i=0,t;
int num,account;
char um[10],pwd[10];
printf("請輸入所要銷戶的賬號:");
scanf("%d",&account);
if((fp=fopen("users.txt","r+"))==NULL) {
printf("File open error!");
exit(0);
}
while(fscanf(fp,"%d %s %s %f %d",&users[account].id,users[account].userName,users[account].userPassword,&users[account].money,&users[account].status)==5) {
if(account==users[account].id) {
break;
}
}
if(users[account].status == 0) {
printf("該賬號已銷號!\n");
printf("請輸入所要銷戶賬號對應的密碼:");
} else if(users[account].status==1||users[account].status==2) {
printf("請輸入所要銷戶的賬戶名:");
scanf("%s",um);
printf("請輸入所要銷戶賬號所對應的密碼:");
scanf("%s",pwd);
if(strcmp(um,users[account].userName)== 0 && strcmp(pwd,users[account].userPassword)== 0) {
temp=fopen("temp.txt","w");
rewind(fp);//回到fp所指檔案內容開頭
while(fscanf(fp,"%d %s %s %f %d",&users[i].id,users[i].userName,users[i].userPassword,&users[i].money,&users[i].status)==5) {
if(strcmp(um,users[i].userName)== 0 && strcmp(pwd,users[i].userPassword)== 0) {
fprintf(temp,"%d %s %s %f %d\n",users[i].id,users[i].userName,users[i].userPassword,users[i].money,0);
users[i].status=0;
t=i;
} else
fprintf(temp,"%d %s %s %f %d\n",users[i].id,users[i].userName,users[i].userPassword,users[i].money,users[i].status);
i++;
}
if(fclose(fp)) {
printf("Can not close the file!\n");
exit(0);
}
if(fclose(temp)) {
printf("Can not close the file!\n");
exit(0);
}
remove("users.txt");//刪除users檔案
rename("temp.txt","users.txt");//重新命名temp檔案
DisplayAccount(t);
} else {
printf("賬號名或密碼輸入錯誤!\n");
printf("請重新輸入:\n");
}
}
}
//轉賬
void TransferAccounts() {
FILE *temp;
int id1,i=0,t;
printf("請輸入您的賬號:");
scanf("%d",&id1);
printf("請輸入您的賬戶名:");
char um1[10],pwd1[10];
scanf("%s",um1);
printf("請輸入您的密碼:");
scanf("%s",pwd1);
if((fp=fopen("users.txt","r+"))==NULL) {
printf("File open error!");
exit(0);
}
while(fscanf(fp,"%d %s %s %f %d",&users[id1].id,users[id1].userName,users[id1].userPassword,&users[id1].money,&users[id1].status)==5) {
if(id1==users[id1].id) {
break;
}
}
if(strcmp(um1,users[id1].userName)==0&&strcmp(pwd1,users[id1].userPassword)==0&&users[id1].status == 1) {
int id2;
printf("請輸入您所要轉入金額的賬號:");
scanf("%d",&id2);
printf("請輸入您所要轉入金額的使用者名稱:");
char um2[10];
scanf("%s",um2);
while(fscanf(fp,"%d %s %s %f %d",&users[id2].id,users[id2].userName,users[id2].userPassword,&users[id2].money,&users[id2].status)==5) {
if(id2==users[id2].id) {
break;
}
}
if(strcmp(um2,users[id2].userName)== 0) {
float money,m1,m2;
printf("請輸入您要轉賬的金額:");
scanf("%f",&money);
if(users[id1].money>money) {
users[id1].money-=money;
users[id2].money+=money;
m1=users[id1].money;
m2=users[id2].money;
temp=fopen("temp.txt","w");
rewind(fp);//回到fp所指檔案內容開頭
while(fscanf(fp,"%d %s %s %f %d",&users[i].id,users[i].userName,users[i].userPassword,&users[i].money,&users[i].status)==5) {
if(strcmp(um1,users[i].userName)==0) {
fprintf(temp,"%d %s %s %f %d\n",users[i].id,users[i].userName,users[i].userPassword,m1,users[i].status);
users[i].money=m1;
}
else if(strcmp(um2,users[i].userName)==0) {
fprintf(temp,"%d %s %s %f %d\n",users[i].id,users[i].userName,users[i].userPassword,m2,users[i].status);
users[i].money=m2;
}
else
fprintf(temp,"%d %s %s %f %d\n",users[i].id,users[i].userName,users[i].userPassword,users[i].money,users[i].status);
i++;
}
if(fclose(fp)) {
printf("Can not close the file!\n");
exit(0);
}
if(fclose(temp)) {
printf("Can not close the file!\n");
exit(0);
}
remove("users.txt");//刪除users檔案
rename("temp.txt","users.txt");//重新命名temp檔案
DisplayAccount(id1);
DisplayAccount(id2);
} else {
DisplayAccount(id1);
printf("您的金額已不足!\n");
}
} else printf("您輸入的收款人姓名錯誤!\n");
} else printf("您輸入的使用者名稱或密碼錯誤!\n");
}
//掛失
void Losecard() {
FILE *temp;
int i=0,t;
int num,account;
char um[10],pwd[10];
printf("請輸入所要掛失的賬號:");
scanf("%d",&account);
if((fp=fopen("users.txt","r+"))==NULL) {
printf("File open error!");
exit(0);
}
while(fscanf(fp,"%d %s %s %f %d",&users[account].id,users[account].userName,users[account].userPassword,&users[account].money,&users[account].status)==5) {
if(account==users[account].id) {
break;
}
}
if(users[account].status== 2) {
printf("該賬號已掛失!\n");
} else if(users[account].status == 0) {
printf("該賬號已銷號!\n");
} else if(users[account].status == 1) {
printf("請輸入所要掛失的賬戶名:");
scanf("%s",um);
printf("請輸入所要掛失賬號對應的密碼:");
scanf("%s",pwd);
if(strcmp(um,users[account].userName)== 0 && strcmp(pwd,users[account].userPassword)== 0) {
temp=fopen("temp.txt","w");
rewind(fp);//回到fp所指檔案內容開頭
while(fscanf(fp,"%d %s %s %f %d",&users[i].id,users[i].userName,users[i].userPassword,&users[i].money,&users[i].status)==5) {
if(strcmp(um,users[i].userName)== 0 && strcmp(pwd,users[i].userPassword)== 0) {
fprintf(temp,"%d %s %s %f %d\n",users[i].id,users[i].userName,users[i].userPassword,users[i].money,2);
users[i].status=2;
t=i;
} else
fprintf(temp,"%d %s %s %f %d\n",users[i].id,users[i].userName,users[i].userPassword,users[i].money,users[i].status);
i++;
}
if(fclose(fp)) {
printf("Can not close the file!\n");
exit(0);
}
if(fclose(temp)) {
printf("Can not close the file!\n");
exit(0);
}
remove("users.txt");//刪除users檔案
rename("temp.txt","users.txt");//重新命名temp檔案
DisplayAccount(t);
} else {
printf("賬號名或密碼輸入錯誤!\n");
printf("請重新輸入:\n");
}
}
}
//取消掛失
void Opencard() {
FILE *temp;
int i=0,t;
int num,account;
char um[10],pwd[10];
printf("請輸入所要掛失的賬號:");
scanf("%d",&account);
if((fp=fopen("users.txt","r+"))==NULL) {
printf("File open error!");
exit(0);
}
while(fscanf(fp,"%d %s %s %f %d",&users[0].id,users[0].userName,users[0].userPassword,&users[0].money,&users[0].status)==5) {
if(account==users[0].id) {
break;
}
}
if(users[0].status==1) {
printf("該賬號狀態正常!\n");
} else if(users[0].status == 0) {
printf("該賬號已銷號!\n");
} else if(users[0].status == 2) {
printf("請輸入所要掛失的賬戶名:");
scanf("%s",um);
printf("請輸入所要掛失賬號對應的密碼:");
scanf("%s",pwd);
if(strcmp(um,users[0].userName)== 0 && strcmp(pwd,users[0].userPassword)== 0) {
temp=fopen("temp.txt","w");
rewind(fp);//回到fp所指檔案內容開頭
while(fscanf(fp,"%d %s %s %f %d",&users[i].id,users[i].userName,users[i].userPassword,&users[i].money,&users[i].status)==5) {
if(strcmp(um,users[i].userName)== 0 && strcmp(pwd,users[i].userPassword)== 0) {
fprintf(temp,"%d %s %s %f %d\n",users[i].id,users[i].userName,users[i].userPassword,users[i].money,1);
users[i].status=1;
t=i;
} else
fprintf(temp,"%d %s %s %f %d\n",users[i].id,users[i].userName,users[i].userPassword,users[i].money,users[i].status);
i++;
}
if(fclose(fp)) {
printf("Can not close the file!\n");
exit(0);
}
if(fclose(temp)) {
printf("Can not close the file!\n");
exit(0);
}
remove("users.txt");//刪除users檔案
rename("temp.txt","users.txt");//重新命名temp檔案
DisplayAccount(t);
} else {
printf("賬號名或密碼輸入錯誤!\n");
printf("請重新輸入:\n");
}
}
}