<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
本文範例為大家分享了C語言實現個人財務管理軟體的具體程式碼,供大家參考,具體內容如下
程式碼:
/*課程設計專案名稱:個人賬戶管理軟體 作者:施瑞文 專業:軟體工程(商業智慧) 時間:2018.1 */ #include<stdio.h> #include<windows.h> #include<string.h> #include<conio.h> #include<stdlib.h> #include<time.h> #define N sizeof(struct Account) //宏定義 #define M sizeof(struct income_and_expenditure) struct income_and_expenditure //收支情況 { float iae; //收入或支出 char ch; //-號代表支出,+號代表收入 int year; //年月日 int month; int day; int num; //標號 char source_or_aim[50]; // 收入來源或支出目的 struct income_and_expenditure *next; // 指標域 ,後接 struct income_and_expenditure *pre; //前驅 }; typedef struct income_and_expenditure IAE; typedef IAE *IAEP; struct Account //賬戶資訊 { char name[10]; //賬號暱稱 char password[18]; //密碼 struct Account *next; //指標域 }; typedef struct Account Acc; typedef Acc *Accp; //好多自定義函數~~ Accp ff(); //將存賬號的檔案裡的內容輸出到連結串列中 IAEP ss(); //將存賬單的檔案裡的內容輸出到連結串列中 void signin(); //登陸或註冊 void login(); // 註冊賬號 void logon(); // 賬號登陸 void menu(); //選單 void over(); //退出系統 void color(short x); //控制顏色 void HideCursor(); //隱藏遊標 void toxy(int x, int y); //將遊標移動到X,Y座標處 void amend_password(); //修改密碼 void add_information(); //新增資訊 void print_information(); //賬單明細 void find_information(); //查詢資訊 void delete_information(); //刪除資訊 void amend_information(); //修改資訊 void save_account(Accp p); //儲存賬號 void save_information(IAEP p); //儲存資訊 char _name[20],_password[18]; //全域性變數記住當前登陸賬戶 /*void color(short x) { if(x>=0&&x<=15) { SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),x); } else { SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),x); } } */ void HideCursor() //隱藏遊標 { CONSOLE_CURSOR_INFO cursor_info = {1, 0}; SetConsoleCursorInfo(GetStdHandle(STD_OUTPUT_HANDLE), &cursor_info); } void toxy(int x, int y) //將遊標移動到X,Y座標處 { COORD pos = { x , y }; HANDLE Out = GetStdHandle(STD_OUTPUT_HANDLE); SetConsoleCursorPosition(Out, pos); } Accp ff() //將存賬號的檔案裡的內容輸出到連結串列中 { FILE *fp; //檔案指標 int n=0; Accp head=NULL; Accp p2,p; fp=fopen("account","a+"); //以唯讀的方式開啟檔案 if(fp==NULL) { printf("cannot open filen"); } else { while(!feof(fp)) //判斷檔案位置標誌是否移動到檔案末尾 { n++; p=(Accp)malloc(N); fread(p,N,1,fp); if(n==1) { head=p; p2=p; } else //建立連結串列 { p2->next=p; p2=p; } } p2->next=NULL; } fclose(fp); return head; } void menu() //選單 { system("cls"); //清屏 system("color 70"); do{ char t; toxy(50,5); printf(" 個人財務管理軟體"); toxy(50,6); printf("當前賬戶為:%s",_name); toxy(48,8); printf("| 1.新增資訊 |"); toxy(48,10); printf("| 2.修改資訊 |"); toxy(48,12); printf("| 3.刪除資訊 |"); toxy(48,14); printf("| 4.賬單明細 |"); toxy(48,16); printf("| 5.查詢資訊 |"); toxy(48,18); printf("| 6.修改密碼 |"); toxy(48,20); printf("| 7.退出系統 |"); t=getch(); //利用不回顯函數,輸入t,可以不用手動按確認鍵 switch(t) { case '1':add_information();break; case '2':amend_information();break; case '3':delete_information();break; case '4':print_information();break; case '5':find_information();break; case '6':amend_password();break; case '7':over();break; default :;break; } }while(1); //永遠為真 } void signin() //登陸或註冊 { system("cls"); HideCursor(); //隱藏遊標 char t; system("color 72"); toxy(50,5); printf("個人財務管理軟體"); toxy(44,8); printf("****************************"); toxy(45,10); printf("請輸入(1:登陸;2:註冊.)"); toxy(44,12); printf("****************************"); while(1) { t=getch(); switch(t) { case '1':logon();break; case '2':login();break; default :break; } } } void logon() // 賬號登陸 { system("cls"); HideCursor(); Accp p,head; head=ff(); do{ HideCursor(); //隱藏遊標 system("color 72"); p=head; char t,c,k; int i=0; toxy(50,5); printf("個人財務管理軟體"); toxy(45,6); printf("--------------------------"); toxy(45,8); printf(" 登陸狀態 "); toxy(45,10); printf("* 請輸入您的賬號:"); gets(_name); toxy(45,12); printf("* 請輸入您的密碼:"); for(;;) //此處為輸入密碼不回顯操作 { k=getch(); //輸入k if(k=='r') //如果輸入k為回車,則跳出迴圈 { break; } else if(k=='b') //如果輸入k為刪除鍵 { if(i>0) //如若密碼還沒完全刪除 { printf("b"); printf(" "); printf("b"); i--; } } else //如果輸入的k既不是刪除鍵,也不是確認鍵 { _password[i]=k; //把k的值賦給_password[i]; printf("*"); //輸出*號,保護使用者隱私 i++; //密碼位數加1 } } _password[i]=' '; while(p!=NULL&&strcmp(p->name,_name)!=0) //遍歷連結串列,尋找當前輸入的賬戶的賬號 { p=p->next; } if(p!=NULL) //如果p不為空 { if(strcmp(p->password,_password)==0) //如果輸入的密碼正確 { toxy(48,16); printf("正在登陸...."); Sleep(500); //暫停0.5秒 system("cls"); system("color 72"); toxy(48,10); printf("登陸成功!"); break; //跳出迴圈 } else //如果輸入的密碼錯誤 { toxy(48,16); printf("正在登陸...."); Sleep(500); system("cls"); system("color 72"); toxy(46,8); printf("-------------------------"); toxy(46,9); printf("| |"); toxy(46,10); printf("| 密碼錯誤!是否繼續? |"); toxy(46,12); printf("| 1.是 2.否 |"); toxy(46,13); printf("| |"); toxy(46,14); printf("-------------------------"); while(1) { t=getch(); //輸入t if(t=='1') { system("cls"); //清屏 system("color 72"); break; } else if(t=='2') //如果輸入t為n,進入開始介面 { signin();break; } } } } else //如果p為空,即輸入的賬號不正確 { toxy(48,16); printf("正在登陸...."); Sleep(500); system("cls"); system("color 72"); toxy(46,8); printf("-------------------------"); toxy(46,9); printf("| |"); toxy(46,10); printf("| 賬號錯誤!是否繼續? |"); toxy(46,11); printf("| |"); toxy(46,12); printf("| 1.是 2.否 |"); toxy(46,13); printf("| |"); toxy(46,14); printf("-------------------------"); while(1) { c=getch(); if(c=='1') { system("cls"); system("color 72"); break; } else if(c=='2') { signin();break; } } } }while(1); //永遠為真 Sleep(500); //暫停0.5秒 menu(); //賬號密碼均正確,進入主選單 } void login() //註冊賬號 { system("cls"); HideCursor(); //隱藏遊標 Accp p1; p1=(Accp)malloc(N); //向記憶體申請一段空間 do{ HideCursor(); system("color 72"); char name[20],password[18],againpassword[18],c,k; int i=0;; toxy(50,5); printf("個人財務管理軟體"); toxy(45,6); printf("-------------------------"); toxy(45,8); printf(" 正在註冊"); toxy(45,10); printf("* 請輸入賬號:"); gets(name); toxy(45,12); printf("* 請輸入密碼:"); for(;;) //此處為輸入密碼不回顯操作 { k=getch(); //輸入k if(k=='r') //如果輸入k為回車,則跳出迴圈 { break; } else if(k=='b') //如果輸入k為刪除鍵 { if(i>0) //如若密碼還沒完全刪除 { printf("b"); printf(" "); printf("b"); i--; } } else //如果輸入的k既不是刪除鍵,也不是確認鍵 { password[i]=k; //把k的值賦給_password[i]; printf("*"); //輸出*號,保護使用者隱私 i++; //密碼位數加1 } } password[i]=' '; i=0; toxy(45,14); printf("* 請確認您的密碼:"); for(;;) //此處為輸入密碼不回顯操作 { k=getch(); //輸入k if(k=='r') //如果輸入k為回車,則跳出迴圈 { break; } else if(k=='b') //如果輸入k為刪除鍵 { if(i>0) //如若密碼還沒完全刪除 { printf("b"); printf(" "); printf("b"); i--; } } else //如果輸入的k既不是刪除鍵,也不是確認鍵 { againpassword[i]=k; //把k的值賦給_password[i]; printf("*"); //輸出*號,保護使用者隱私 i++; //密碼位數加1 } } againpassword[i]=' '; if(strcmp(password,againpassword)==0) //如果輸入的兩次密碼均正確 { strcpy(p1->name,name); strcpy(p1->password,password); toxy(48,16); printf("正在註冊...."); Sleep(500); system("cls"); system("color 72"); toxy(48,10); printf("註冊成功!"); Sleep(500); //暫停0.5秒 break; //跳出迴圈 } else //如果輸入的兩次密碼不同 { toxy(48,16); printf("正在註冊...."); Sleep(500); system("cls"); system("color 72"); toxy(46,8); printf("-----------------------------"); toxy(46,9); printf("| |"); toxy(46,10); printf("| 註冊失敗!是否繼續註冊? |"); toxy(46,11); printf("| |"); toxy(46,12); printf("| 1.是 2.否 |"); toxy(46,13); printf("| |"); toxy(46,14); printf("-----------------------------"); while(1) { c=getch(); if(c=='1') { system("cls"); system("color 72"); break; } else if(c=='2') { signin(); break; } } } }while(1); //永遠為真 save_account(p1); //呼叫函數,將p1所指向的內容儲存到檔案中 toxy(48,12); printf("正在自動為您登陸...."); Sleep(500); menu(); //註冊成功後進入主選單 } /*修改密碼 方法比較笨,這裡是先將儲存在檔案中的賬戶資訊 輸出在一個連結串列中,遍歷連結串列,尋找當前登陸的賬戶賬號,修改該節點的p->password, 再將修改後的連結串列存到檔案中,需要注意的是修改之後再存到檔案中需要將該檔案中的內容 清空*/ void amend_password() //修改密碼 { system("cls"); //清屏 system("color 74"); //看著舒服的顏色 HideCursor(); Accp p,head; //隱藏遊標,看著更舒服 head=ff(); FILE *fp; do { HideCursor(); //隱藏遊標,看著舒服 p=head; char password[18],newpassword[18],t,k; int i=0; toxy(50,5); //將遊標移動到座標為(50,5)的位置 printf("個人財務管理軟體"); toxy(50,8); printf("修改密碼"); toxy(48,10); printf("請輸入舊密碼:"); for(;;) //此處為輸入密碼不回顯操作 { k=getch(); //輸入k if(k=='r') //如果輸入k為回車,則跳出迴圈 { break; } else if(k=='b') //如果輸入k為刪除鍵 { if(i>0) //如若密碼還沒完全刪除 { printf("b"); printf(" "); printf("b"); i--; } } else //如果輸入的k既不是刪除鍵,也不是確認鍵 { password[i]=k; //把k的值賦給_password[i]; printf("*"); //輸出*號,保護使用者隱私 i++; //密碼位數加1 } } password[i]=' '; i=0; toxy(48,12); printf("請輸入新密碼:"); for(;;) //此處為輸入密碼不回顯操作 { k=getch(); //輸入k if(k=='r') //如果輸入k為回車,則跳出迴圈 { break; } else if(k=='b') //如果輸入k為刪除鍵 { if(i>0) //如若密碼還沒完全刪除 { printf("b"); printf(" "); printf("b"); i--; } } else //如果輸入的k既不是刪除鍵,也不是確認鍵 { newpassword[i]=k; //把k的值賦給_password[i]; printf("*"); //輸出*號,保護使用者隱私 i++; //密碼位數加1 } } newpassword[i]=' '; while(p!=NULL&&strcmp(p->name,_name)!=0)//遍歷連結串列,尋找當前登陸賬戶的賬號 { p=p->next; } if(p!=NULL) //如果p不為空 { if(strcmp(p->password,password)==0) //如果舊密碼輸入正確 { strcpy(p->password,newpassword); //將舊密碼改為新密碼 break; //跳出迴圈 } else //如果舊密碼輸入錯誤 { system("cls"); system("color 72"); toxy(46,8); printf("--------------------------"); toxy(46,9); printf("| |"); toxy(46,10); printf("| 密碼錯誤!是否繼續? |"); toxy(46,11); printf("| |"); toxy(46,12); printf("| 1.是 2.否 |"); toxy(46,13); printf("| |"); toxy(46,14); printf("--------------------------"); while(1) { t=getch(); //輸入t if(t=='1') { system("cls"); system("color 72"); break; } else if(t=='2') menu(); } } } }while(1); //永遠為真 p=head->next; //使p指向第二個結點 fp=fopen("account","w"); //先清空原檔案內容再將修改後的資訊寫入檔案 if(fp==NULL) { printf("cannot open filen"); } if(fwrite(head,N,1,fp)!=1) //將head所指向的資料寫入fp所指向的檔案 { printf("file write errorn"); } fclose(fp); //關閉檔案 fp=fopen("account","a"); // 開啟account檔案,方式為追加 while(p!=NULL) //p不為空就執行迴圈體 { if(fwrite(p,N,1,fp)!=1) //將p所指向的1個大小為N的資料結構寫入fp所指向的檔案 { printf("file write errorn"); } p=p->next; //使p指向下一個結點 } fclose(fp); //關閉檔案 toxy(48,14); printf("修改成功!正在跳轉..."); Sleep(500); //暫停0.5秒 } void save_account(Accp p1) //將p1所指向的內容儲存到檔案中 { FILE *fp; //檔案指標 fp=fopen("account","a"); //以追加的方式開啟檔案 if(fp==NULL) { printf("cannot open filen"); } if(fwrite(p1,N,1,fp)!=1) //將p1所指向的1個大小為N的資料結構寫入fp所指向的檔案中 { printf("file write errorn"); } fclose(fp); //關閉檔案 } IAEP ss() //將存賬單的檔案裡的內容輸出到連結串列中 { FILE *fp; //檔案指標 int n=0; IAEP head=NULL; IAEP p,p2,pr=NULL; fp=fopen(_name,"ab+");//開啟檔案,方式為唯讀 if(fp==NULL) //如果開啟為空 { printf("cannot open filen"); } else { while(!feof(fp)) // feof函數可以檢查檔案讀寫位置標誌是否移動到檔案末尾,feof(fp)檢查fp所指向的檔案是否結束,如果是 { //則函數值為真,否則為假,即「!feof(fp)」為真,在while迴圈中檢查 「!feof(fp)」為真,就執行迴圈體 n++; p=(IAEP)malloc(M); //向記憶體申請一段空間 fread(p,M,1,fp); //從fp所指向的檔案讀入1個大小為M的資料,儲存到p所指向的空間中 if(n==1) { head=p; p2=p; head->pre=NULL; } else //建立雙向連結串列 { pr=p2; //pr是p的前驅結點 p->pre=p2; p2->next=p; p2=p; } } if(pr!=NULL) { pr->next=NULL; } } fclose(fp); if(n==1) head=NULL; return head; } void add_information() //新增資訊 { do { system("cls"); //清屏 system("color 75"); //顏色 HideCursor(); //隱藏遊標 IAEP p; char t; toxy(50,5); printf("個人賬戶管理軟體"); p=(IAEP)malloc(M); //申請一段大小為M 的空間 toxy(44,8); printf("請輸入金額:"); scanf("%f",&p->iae); getchar(); //吸收確認鍵 toxy(44,10); printf("請輸入收支型別(-代表支出,+代表收入):"); scanf("%c",&p->ch); getchar(); toxy(44,12); printf("請輸入時間(年 月 日):"); scanf("%d%d%d",&p->year,&p->month,&p->day); getchar(); toxy(44,14); printf("請輸入收入來源或支出目的:"); gets(p->source_or_aim); save_information(p); //儲存p到檔案中 toxy(44,16); printf("正在儲存...."); Sleep(500); //暫停0.5秒 system("cls"); system("color 73"); toxy(46,8); printf("-------------------------"); toxy(46,9); printf("| |"); toxy(46,10); printf("| 儲存成功!是否繼續? |"); toxy(46,12); printf("| 1.是 2.否 |"); toxy(46,13); printf("| |"); toxy(46,14); printf("-------------------------"); while(1) { t=getch(); //輸入t if(t=='1') { break; } else if(t=='2') //如果輸入t為2,進入選單 { menu();break; } } }while(1); //永遠為真 } void print_information() //輸出賬單 { system("cls"); //清屏 system("color 76"); //看著舒服的顏色 HideCursor(); //隱藏遊標,看著更舒服 FILE *fp; //檔案指標 int n=0; int i=12; char t; float sum=0,sum1=0,sum2=0; IAEP head=NULL; IAEP p,p2,pr=NULL; fp=fopen(_name,"ab+");//開啟檔案,方式為唯讀 if(fp==NULL) //如果開啟為空 { printf("cannot open filen"); } while(!feof(fp)) // feof函數可以檢查檔案讀寫位置標誌是否移動到檔案末尾,feof(fp)檢查fp所指向的檔案是否結束,如果是 { //則函數值為真,否則為假,即「!feof(fp)」為真,在while迴圈中檢查 「!feof(fp)」為真,就執行迴圈體 n++; p=(IAEP)malloc(M); //向記憶體申請一段空間 fread(p,M,1,fp); //從fp所指向的檔案讀入1個大小為M的資料,儲存到p所指向的空間中 if(n==1) { head=p; p2=p; head->pre=NULL; } else //建立雙向連結串列 { pr=p2; //pr是p的前驅結點 p->pre=p2; p2->next=p; p2=p; } //printf("%d.%d.%-12d%c%-24f%sn",p->year,p->month,p->day,p->ch,p->iae,p->source_or_aim); } fclose(fp); //關閉fp所指向的檔案 toxy(50,5); printf("個人賬戶管理軟體"); toxy(54,7); printf("賬單明細(按0返回)"); toxy(30,8); printf("----------------------------------------------------------------"); toxy(30,9); printf("時 間 金 額 收入來源或支出目的"); toxy(30,10); printf("----------------------------------------------------------------"); if(pr!=NULL) { pr->next=NULL; p=pr; while(p!=NULL) { toxy(30,i); printf("%d.%d.%-12d%c%-24f%sn",p->year,p->month,p->day,p->ch,p->iae,p->source_or_aim); if(p->ch=='+') { sum1+=p->iae; } else if(p->ch=='-') { sum2-=p->iae; } sum=sum1+sum2; i++; p=p->pre; } toxy(30,11); printf("總 計: %f 總支出: %f 總收入: %f",sum,sum2,sum1); } else if(pr==NULL) { toxy(50,11); printf("您還沒記錄任何資訊哦~"); } while(1) { t=getch(); if(t=='0') { menu();break; } } } void find_information() //查詢資訊 { system("cls"); //清屏 system("color 77"); //看著舒服的顏色 HideCursor(); //隱藏遊標,看著更舒服 int i=15; char t; int year,month,day; IAEP p=NULL; p=ss(); toxy(50,5); printf("個人賬戶管理軟體"); toxy(54,7); printf("查詢資訊"); toxy(40,9); printf("請輸入您要查詢的資訊(輸入年月日,空格隔開):"); toxy(50,10); scanf("%d%d%d",&year,&month,&day); getchar(); toxy(30,12); printf("----------------------------------------------------------------"); toxy(30,13); printf("時 間 金 額 收入來源或支出目的"); toxy(30,14); printf("----------------------------------------------------------------"); if(p!=NULL) { //printf("n%sn",p->source_or_aim); while(p!=NULL) { if(p->year==year&&p->month==month&&p->day==day) { toxy(30,i); printf("%d.%d.%-12d%c%-24f%sn",p->year,p->month,p->day,p->ch,p->iae,p->source_or_aim); i++; } p=p->next; } } else if(p==NULL) { toxy(50,i); printf("沒有找到相應的資訊~"); } toxy(54,i+1); printf("按0返回主選單!"); while(1) { t=getch(); if(t=='0') { menu();break; } } } void delete_information() //刪除資訊 { do{ system("cls"); system("color 79"); HideCursor(); //隱藏遊標 FILE *fp; //檔案指標 int year,month,day,i,j; int c; char t,k,ch; IAEP p,head,pr=NULL; head=ss(); //呼叫ss()函數,將該函數的返回值賦給head toxy(50,5); printf("個人賬戶管理軟體"); toxy(54,7); printf("刪除資訊"); toxy(40,9); printf("請輸入您要查詢的資訊(輸入年月日,空格隔開):"); toxy(50,10); scanf("%d%d%d",&year,&month,&day); //輸入年月日 toxy(30,12); printf("----------------------------------------------------------------"); toxy(30,13); printf("時 間 金 額 收入來源或支出目的"); toxy(30,14); printf("----------------------------------------------------------------"); i=15;j=0; //給i,j初始化 p=head; //注意,再次使p重新指向第一個結點,不要忘了 while(p!=NULL) { if(p->year==year&&p->month==month&&p->day==day) { toxy(28,i); j++; //j是標記被搜尋的資訊 printf("%d: %d.%d.%-12d%c%-24f%sn",j,p->year,p->month,p->day,p->ch,p->iae,p->source_or_aim); p->num=j; //將j賦值給p->num i++; } p=p->next; } if(j==0) //如果j=0,即沒有進入前面的搜尋迴圈,也就是沒有找到相應的資訊 { toxy(50,i); printf("沒有找到相應的資訊!(按0返回,按1重新搜尋)"); while(1) //死迴圈是為了防止除0和1的其他按鍵干擾 { ch=getch(); if(ch=='0') { menu();break; } else if(ch=='1') { break; } } if(ch=='1') //如果輸入的ch等於1,則結束本次迴圈 continue; } while(1) { toxy(50,i); printf("請輸入您要刪除的資訊的標號:"); scanf("%d",&c); getchar(); i++; if(c<=j) //如果c<=j,即輸入正確 break; else if(c>j) //否則,輸入錯誤 { toxy(50,i); printf("沒有找到您所要刪除的資訊,請重新輸入!"); i++; Sleep(500); //暫停0.5秒 } } toxy(46,16); printf("-------------------------"); toxy(46,17); printf("| |"); toxy(46,18); printf("| 確認刪除? |"); toxy(46,19); printf("| 1.確認 2.取消 |"); toxy(46,20); printf("| |"); toxy(46,21); printf("-------------------------"); while(1) { p=head; //每一次遍歷連結串列之前,記得將p指向頭結點 pr=NULL; t=getch(); //輸入t if(t=='1') //如果輸入t=1,即選擇確認刪除選項 { while(p!=NULL&&p->num!=c) { pr=p; //pr記錄p的前驅結點 p=p->next; //p指向下一節點 } if(p!=NULL) { if(pr==NULL) //如果pr=NULL,即刪除的結點為第一個結點 { head=p->next; } else //否則,刪除其他結點 { pr->next=p->next; } } free(p); //釋放p break; //跳出迴圈 } else if(t=='2') //如果輸入t=2,即選擇取消刪除選項 { system("cls"); //清屏 toxy(46,8); printf("------------------------------"); toxy(46,9); printf("| |"); toxy(46,10); printf("| 返回刪除介面還是回主選單 |"); toxy(46,11); printf("| 1.刪除介面 2.主選單 |"); toxy(46,12); printf("| |"); toxy(46,13); printf("------------------------------"); while(1) //死迴圈為了防止其他按鍵的干擾 { k=getch(); //輸入K if(k=='1') break; else if(k=='2') //如果輸入k=2,回到主選單 menu(); } if(k=='1') break; } } if(t=='1') { fp=fopen(_name,"wb"); //先清空原檔案內容再將修改後的資訊寫入檔案 if(fp==NULL) { printf("cannot open filen"); } if(fwrite(head,M,1,fp)!=1) //將head所指向的資料寫入fp所指向的檔案 { printf("file write errorn"); } fclose(fp); //關閉檔案 if(head!=NULL) //如果頭指標不為空 { p=head->next; //使p指向第二個結點 fp=fopen(_name,"ab"); // 開啟檔案,方式為追加 while(p!=NULL) //p不為空就執行迴圈體 { if(fwrite(p,M,1,fp)!=1) //將p所指向的1個大小為N的資料結構寫入fp所指向的檔案 { printf("file write errorn"); } p=p->next; //使p指向下一個結點 } fclose(fp); //關閉檔案 } system("cls"); system("color 75"); toxy(48,16); printf("正在刪除,請稍後...."); Sleep(500); system("cls"); toxy(48,16); printf("刪除成功!自動跳轉到選單...."); break; } }while(1);//永遠為真 Sleep(500); menu(); } void amend_information() //修改資訊 { system("cls"); //清屏 system("color 79"); //看著舒服的顏色 HideCursor(); //隱藏遊標,看著更舒服 IAEP p,head; FILE *fp; int i=15,j=0,c; int year,day,month,newyear,newday,newmonth; char source_or_aim[50]; char ch,cc,t; int aie; head=ss(); p=head; do { system("cls"); toxy(50,5); printf("個人賬戶管理軟體"); toxy(54,7); printf("修改資訊"); toxy(40,9); printf("請輸入您要修改的資訊(輸入年月日,空格隔開):"); toxy(50,10); scanf("%d%d%d",&year,&month,&day); getchar(); toxy(30,12); printf("----------------------------------------------------------------"); toxy(30,13); printf("時 間 金 額 收入來源或支出目的"); toxy(30,14); printf("----------------------------------------------------------------"); i=15;j=0; while(p!=NULL) //將每個結點的p->num都賦為0,以免後面資料干擾 { p->num=0; p=p->next; } p=head; //重新讓p指向head while(p!=NULL) { if(p->year==year&&p->month==month&&p->day==day) { toxy(30,i); j++; printf("%d: %d.%d.%-12d%c%-24f%sn",j,p->year,p->month,p->day,p->ch,p->iae,p->source_or_aim); p->num=j; //給p->num賦值,即給滿足搜尋要求的結點編號 i++; } p=p->next; } if(j==0) //如果j=0,即沒有進入前面的搜尋迴圈,也就是沒有找到相應的資訊 { toxy(50,i); printf("沒有找到相應的資訊!(按0返回,按1重新搜尋)"); while(1) //死迴圈是為了防止除0和1的其他按鍵干擾 { ch=getch(); if(ch=='0') { menu();break; } else if(ch=='1') { break; } } if(ch=='1') //如果輸入的ch等於1,則結束本次迴圈 continue; } while(1) { toxy(50,i); printf("請輸入您要修改的資訊的標號:"); scanf("%d",&c); getchar(); i++; if(c<=j) //如果c<=j,即輸入正確 break; else if(c>j) //否則,輸入錯誤 { toxy(50,i); printf("沒有找到您所要修改的資訊,請重新輸入!"); i++; Sleep(500); //暫停0.5秒 } } p=head; //讓p重新指向head,即第一個結點 while(p!=NULL&&p->num!=c) //遍歷連結串列,尋找滿足要求的結點 { p=p->next; } if(p!=NULL) //如果尋找成功,進入修改部分 { system("cls"); //清屏 toxy(44,8); printf("請輸入修改後的金額:"); scanf("%d",&aie);getchar();p->iae=aie; toxy(44,10); printf("請輸入收支型別(-代表支出,+代表收入):"); scanf("%c",&cc);getchar();p->ch=cc; toxy(44,12); printf("請輸入時間(年 月 日):"); scanf("%d%d%d",&newyear,&newmonth,&newday);getchar(); p->year=newyear;p->month=newmonth;p->day=newday; toxy(44,14); printf("請輸入收入來源或支出目的:"); gets(source_or_aim); strcpy(p->source_or_aim,source_or_aim); toxy(46,16); printf("-------------------------"); toxy(46,17); printf("| |"); toxy(46,18); printf("| 是否確認修改? |"); toxy(46,19); printf("| 1.確認 2.取消 |"); toxy(46,20); printf("| |"); toxy(46,21); printf("-------------------------"); while(1) //死迴圈為防止其他按鍵干擾 { t=getch(); if(t=='1') break; else if(t=='2') { menu(); } } if(t=='1') //如果t等於1,則跳出迴圈 { break; } } }while(1); p=head; //p重新指向頭節點 system("cls"); toxy(44,12); printf("正在修改...."); fp=fopen(_name,"wb"); //開啟檔案的同時清除檔案內的內容 if(fp==NULL) { printf("cannot open file"); } while(p!=NULL) { if(fwrite(p,M,1,fp)!=1) //將p所指向的內容存入fp所指向的檔案中 { printf("file write errorn"); } p=p->next; } fclose(fp); //關閉檔案 Sleep(500); system("cls"); toxy(44,12); printf("修改成功!正在自動跳轉到主選單...."); Sleep(500); menu(); } void save_information(IAEP p) //儲存資訊 { FILE *fp; //檔案指標 fp=fopen(_name,"ab"); //以追加的方式開啟檔案 if(fp==NULL) { printf("cannot open filen"); } if(fwrite(p,M,1,fp)!=1) //將p所指向的1個大小為M的資料結構寫入fp所指向的檔案中 { printf("file write errorn"); } fclose(fp); //關閉檔案 } void over() //退出軟體 { char t; toxy(48,11); printf("-----------------------"); toxy(48,12); printf("| 您確定要退出嗎? |"); toxy(48,14); printf("| 1.確定 2.取消 |"); toxy(48,15); printf("-----------------------"); while(1) { t=getch(); //輸入t switch(t) { case '1': system("cls"); system("color 78"); toxy(48,10); printf("正在安全退出...."); Sleep(1000); //暫停1秒 system("cls"); system("color 75"); toxy(48,10); printf("已安全退出軟體"); toxy(48,12); printf("謝謝使用!"); toxy(48,14); printf("by-by^_^"); exit(0); break; //終止程式 case '2': menu(); break; //呼叫函數,進入選單 default :break; } } } main() //簡單明瞭的主函數^~^ { signin(); //呼叫函數 }
以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支援it145.com。
相關文章
<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
综合看Anker超能充系列的性价比很高,并且与不仅和iPhone12/苹果<em>Mac</em>Book很配,而且适合多设备充电需求的日常使用或差旅场景,不管是安卓还是Switch同样也能用得上它,希望这次分享能给准备购入充电器的小伙伴们有所
2021-06-01 09:31:42
除了L4WUDU与吴亦凡已经多次共事,成为了明面上的厂牌成员,吴亦凡还曾带领20XXCLUB全队参加2020年的一场音乐节,这也是20XXCLUB首次全员合照,王嗣尧Turbo、陈彦希Regi、<em>Mac</em> Ova Seas、林渝植等人全部出场。然而让
2021-06-01 09:31:34
目前应用IPFS的机构:1 谷歌<em>浏览器</em>支持IPFS分布式协议 2 万维网 (历史档案博物馆)数据库 3 火狐<em>浏览器</em>支持 IPFS分布式协议 4 EOS 等数字货币数据存储 5 美国国会图书馆,历史资料永久保存在 IPFS 6 加
2021-06-01 09:31:24
开拓者的车机是兼容苹果和<em>安卓</em>,虽然我不怎么用,但确实兼顾了我家人的很多需求:副驾的门板还配有解锁开关,有的时候老婆开车,下车的时候偶尔会忘记解锁,我在副驾驶可以自己开门:第二排设计很好,不仅配置了一个很大的
2021-06-01 09:30:48
不仅是<em>安卓</em>手机,苹果手机的降价力度也是前所未有了,iPhone12也“跳水价”了,发布价是6799元,如今已经跌至5308元,降价幅度超过1400元,最新定价确认了。iPhone12是苹果首款5G手机,同时也是全球首款5nm芯片的智能机,它
2021-06-01 09:30:45