C語言實現(xiàn)個人財務(wù)管理軟件
更新時間:2022年05月30日 10:27:53 作者:Sriven
這篇文章主要為大家詳細介紹了C語言實現(xiàn)個人財務(wù)管理軟件,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
本文實例為大家分享了C語言實現(xiàn)個人財務(wù)管理軟件的具體代碼,供大家參考,具體內(nèi)容如下
代碼:
/*課程設(shè)計項目名稱:個人賬戶管理軟件 ? 作者:施瑞文? ? 專業(yè):軟件工程(商業(yè)智能)? ? 時間: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; ? //前驅(qū)? }; 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; ? //好多自定義函數(shù)~~ Accp ff(); ? ? ? ? ? ? ? ? ? ? //將存賬號的文件里的內(nèi)容輸出到鏈表中 IAEP ss(); ? ? ? ? ? ? ? ? ? //將存賬單的文件里的內(nèi)容輸出到鏈表中? void signin(); ? ? ? ? ? ? ? //登陸或注冊? void login(); ? ? ? ? ? ? ? ? // 注冊賬號? void logon(); ? ? ? ? ? ? ? ? ?// 賬號登陸 ? void menu(); ? ? ? ? ? ? ? ? //菜單? void over(); ? ? ? ? ? ? ? ? ?//退出系統(tǒng)? 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() ? ? ? ? ? ? ? //將存賬號的文件里的內(nèi)容輸出到鏈表中 { ?? ?FILE *fp; ? ? ? //文件指針? ?? ?int n=0; ?? ?Accp head=NULL; ?? ?Accp p2,p; ?? ?fp=fopen("account","a+"); ? ? //以只讀的方式打開文件? ?? ?if(fp==NULL) ?? ?{ ?? ??? ?printf("cannot open file\n"); ?? ?} ?? ?else ?? ?{ ?? ??? ?while(!feof(fp)) ? ? ? ?//判斷文件位置標志是否移動到文件末尾? ?? ??? ?{ ?? ??? ? ? n++; ?? ??? ? ? ?? ?p=(Accp)malloc(N); ?? ??? ? ? fread(p,N,1,fp); ?? ??? ? ? if(n==1) ?? ??? ? ? { ?? ??? ? ? ? ?head=p; ?? ??? ? ? ? ?p2=p; ?? ??? ? ? ?} ?? ??? ? ? ?else ? ? ? ? ? ? //創(chuàng)建鏈表? ?? ??? ? ? ?{ ?? ??? ? ? ??? ?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(" 個人財務(wù)管理軟件"); ?? ??? ?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ǒng) ? ? ?|"); ?? ??? ?t=getch(); ? ? ? ? ? ? ? ? ? ?//利用不回顯函數(shù),輸入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("個人財務(wù)管理軟件"); ?? ?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("個人財務(wù)管理軟件"); ?? ??? ?toxy(45,6); ?? ??? ?printf("--------------------------"); ?? ??? ?toxy(45,8); ?? ??? ?printf(" ? ? 登陸狀態(tài) ? ? ? "); ?? ??? ?toxy(45,10); ?? ??? ?printf("* ?請輸入您的賬號:"); ?? ??? ?gets(_name); ?? ??? ?toxy(45,12); ?? ??? ?printf("* ?請輸入您的密碼:"); ?? ??? ?for(;;) ? ? ? ? ? ? ?//此處為輸入密碼不回顯操作? ?? ??? ?{ ?? ??? ??? ?k=getch(); ? ? ? //輸入k? ?? ??? ??? ?if(k=='\r') ? ? ?//如果輸入k為回車,則跳出循環(huán)? ?? ??? ??? ?{ ?? ??? ??? ??? ?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++; ? ? ? ? ? ? ?//密碼位數(shù)加1? ?? ??? ??? ?} ?? ??? ?} ?? ??? ?_password[i]='\0'; ?? ??? ?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; ? ?//跳出循環(huán) ?? ??? ??? ?} ?? ??? ??? ?else ? ? ?//如果輸入的密碼錯誤 ?? ??? ??? ?{? ?? ??? ??? ??? ?toxy(48,16); ?? ??? ??? ??? ?printf("正在登陸...."); ?? ??? ??? ??? ?Sleep(500); ?? ??? ??? ??? ?system("cls"); ?? ??? ??? ??? ?system("color 72"); ?? ??? ??? ??? ?toxy(46,8); ?? ??? ??? ??? ?printf("-------------------------"); ?? ??? ??? ??? ?toxy(46,9); ?? ??? ??? ??? ?printf("| ? ? ? ? ? ? ? ? ? ? ? |"); ?? ??? ??? ??? ?toxy(46,10); ?? ??? ??? ??? ?printf("| 密碼錯誤!是否繼續(xù)? ?|"); ?? ??? ??? ??? ?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("| ?賬號錯誤!是否繼續(xù)? |"); ?? ??? ??? ?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); ? ? //向內(nèi)存申請一段空間? ?? ?do{ ?? ??? ?HideCursor(); ?? ??? ?system("color 72"); ?? ??? ?char name[20],password[18],againpassword[18],c,k; ?? ??? ?int i=0;;? ?? ??? ?toxy(50,5); ?? ??? ?printf("個人財務(wù)管理軟件"); ?? ??? ?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為回車,則跳出循環(huán)? ?? ??? ??? ?{ ?? ??? ??? ??? ?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++; ? ? ? ? ? ? ?//密碼位數(shù)加1? ?? ??? ??? ?} ?? ??? ?} ?? ??? ?password[i]='\0'; ?? ??? ?i=0; ?? ??? ?toxy(45,14); ?? ??? ?printf("* ?請確認您的密碼:"); ?? ??? ?for(;;) ? ? ? ? ? ? ?//此處為輸入密碼不回顯操作? ?? ??? ?{ ?? ??? ??? ?k=getch(); ? ? ? //輸入k? ?? ??? ??? ?if(k=='\r') ? ? ?//如果輸入k為回車,則跳出循環(huán)? ?? ??? ??? ?{ ?? ??? ??? ??? ?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++; ? ? ? ? ? ? ?//密碼位數(shù)加1? ?? ??? ??? ?} ?? ??? ?} ?? ??? ?againpassword[i]='\0'; ?? ??? ?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; ? ? ? ? ? ? ?//跳出循環(huán)? ?? ??? ?} ?? ??? ?else ? ?//如果輸入的兩次密碼不同? ?? ??? ?{ ?? ??? ??? ?toxy(48,16); ?? ??? ??? ?printf("正在注冊...."); ?? ??? ??? ?Sleep(500); ?? ??? ??? ?system("cls"); ?? ??? ??? ?system("color 72"); ?? ??? ??? ?toxy(46,8); ?? ??? ??? ?printf("-----------------------------"); ?? ??? ??? ?toxy(46,9); ?? ??? ??? ?printf("| ? ? ? ? ? ? ? ? ? ? ? ? ? |"); ?? ??? ??? ?toxy(46,10); ?? ??? ??? ?printf("| ?注冊失??!是否繼續(xù)注冊? |"); ?? ??? ??? ?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); ? ? //調(diào)用函數(shù),將p1所指向的內(nèi)容存儲到文件中? ?? ?toxy(48,12); ?? ?printf("正在自動為您登陸...."); ?? ?Sleep(500); ?? ?menu(); ? ?//注冊成功后進入主菜單? } ? /*修改密碼 方法比較笨,這里是先將儲存在文件中的賬戶信息 輸出在一個鏈表中,遍歷鏈表,尋找當前登陸的賬戶賬號,修改該節(jié)點的p->password, 再將修改后的鏈表存到文件中,需要注意的是修改之后再存到文件中需要將該文件中的內(nèi)容 清空*/? 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("個人財務(wù)管理軟件"); ?? ??? ?toxy(50,8); ?? ??? ?printf("修改密碼"); ?? ??? ?toxy(48,10); ?? ??? ?printf("請輸入舊密碼:"); ?? ??? ?for(;;) ? ? ? ? ? ? ?//此處為輸入密碼不回顯操作? ?? ??? ?{ ?? ??? ??? ?k=getch(); ? ? ? //輸入k? ?? ??? ??? ?if(k=='\r') ? ? ?//如果輸入k為回車,則跳出循環(huán)? ?? ??? ??? ?{ ?? ??? ??? ??? ?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++; ? ? ? ? ? ? ?//密碼位數(shù)加1? ?? ??? ??? ?} ?? ??? ?} ?? ??? ?password[i]='\0'; ?? ??? ?i=0; ?? ??? ?toxy(48,12); ?? ??? ?printf("請輸入新密碼:"); ?? ??? ?for(;;) ? ? ? ? ? ? ?//此處為輸入密碼不回顯操作? ?? ??? ?{ ?? ??? ??? ?k=getch(); ? ? ? //輸入k? ?? ??? ??? ?if(k=='\r') ? ? ?//如果輸入k為回車,則跳出循環(huán)? ?? ??? ??? ?{ ?? ??? ??? ??? ?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++; ? ? ? ? ? ? ?//密碼位數(shù)加1? ?? ??? ??? ?} ?? ??? ?} ?? ??? ?newpassword[i]='\0'; ?? ??? ?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; ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? //跳出循環(huán)? ?? ??? ??? ?} ?? ??? ??? ?else ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? //如果舊密碼輸入錯誤? ?? ??? ??? ?{ ?? ??? ??? ??? ?system("cls"); ?? ??? ??? ??? ?system("color 72"); ?? ??? ??? ??? ?toxy(46,8); ?? ??? ??? ??? ?printf("--------------------------"); ?? ??? ??? ??? ?toxy(46,9); ?? ??? ??? ??? ?printf("| ? ? ? ? ? ? ? ? ? ? ? ?|"); ?? ??? ??? ??? ?toxy(46,10); ?? ??? ??? ??? ?printf("| ?密碼錯誤!是否繼續(xù)? ?|"); ?? ??? ??? ??? ?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指向第二個結(jié)點? ?? ?fp=fopen("account","w"); ? ? ? ? ? ? ? ? ?//先清空原文件內(nèi)容再將修改后的信息寫入文件? ?? ?if(fp==NULL) ?? ?{ ?? ??? ?printf("cannot open file\n"); ?? ?} ?? ?if(fwrite(head,N,1,fp)!=1) ? ? ? ? ? ? ? ? //將head所指向的數(shù)據(jù)寫入fp所指向的文件? ?? ?{ ?? ??? ?printf("file write error\n"); ?? ?} ?? ?fclose(fp); ? ? ? ? ? ? ? ? ? ? ? ? //關(guān)閉文件? ?? ?fp=fopen("account","a"); ? ? ? ? ?// 打開account文件,方式為追加? ?? ?while(p!=NULL) ? ? ? ? ? ? ? ? ? ?//p不為空就執(zhí)行循環(huán)體? ?? ?{ ?? ??? ?if(fwrite(p,N,1,fp)!=1) ? ? ? ? ? ?//將p所指向的1個大小為N的數(shù)據(jù)結(jié)構(gòu)寫入fp所指向的文件? ?? ? ? ?{ ?? ??? ?printf("file write error\n"); ?? ? ? ?} ?? ? ? ?p=p->next; ? ? ? ? ? ? ? ? ? ? //使p指向下一個結(jié)點? ?? ?} ?? ?fclose(fp); ? ? ? ? ? ? ?//關(guān)閉文件? ?? ?toxy(48,14); ?? ?printf("修改成功!正在跳轉(zhuǎn)..."); ?? ?Sleep(500); ? ? ? //暫停0.5秒? } ? ? void save_account(Accp p1) ? ? //將p1所指向的內(nèi)容存儲到文件中? { ?? ?FILE *fp; ? ? ? //文件指針? ?? ?fp=fopen("account","a"); ? ?//以追加的方式打開文件? ?? ?if(fp==NULL) ?? ?{ ?? ??? ?printf("cannot open file\n"); ?? ?} ?? ?if(fwrite(p1,N,1,fp)!=1) ? ?//將p1所指向的1個大小為N的數(shù)據(jù)結(jié)構(gòu)寫入fp所指向的文件中? ?? ?{ ?? ??? ?printf("file write error\n"); ?? ?} ?? ?fclose(fp); ? ? ? ?//關(guān)閉文件? } IAEP ss() ? ? ? ? ? ? //將存賬單的文件里的內(nèi)容輸出到鏈表中? { ?? ?FILE *fp; ? ? ? ? ? ? ?//文件指針 ?? ?int n=0;? ?? ?IAEP head=NULL; ?? ?IAEP p,p2,pr=NULL; ?? ?fp=fopen(_name,"ab+");//打開文件,方式為只讀? ?? ?if(fp==NULL) ? ? ? ? ? ?//如果打開為空? ?? ?{ ?? ??? ?printf("cannot open file\n"); ?? ?} ?? ?else ?? ?{ ?? ??? ?while(!feof(fp)) ? ? ? ? // feof函數(shù)可以檢查文件讀寫位置標志是否移動到文件末尾,feof(fp)檢查fp所指向的文件是否結(jié)束,如果是? ?? ??? ?{ ? ? ? ? ? ? ? ? ? ? ? ?//則函數(shù)值為真,否則為假,即“!feof(fp)”為真,在while循環(huán)中檢查 “!feof(fp)”為真,就執(zhí)行循環(huán)體? ?? ??? ? ? n++; ?? ??? ? ? p=(IAEP)malloc(M); ? //向內(nèi)存申請一段空間? ?? ??? ? ? fread(p,M,1,fp); ? ? ?//從fp所指向的文件讀入1個大小為M的數(shù)據(jù),存儲到p所指向的空間中? ?? ??? ? ? if(n==1)? ?? ??? ? ? { ?? ??? ? ? ? ?head=p; ?? ??? ? ? ? ?p2=p; ?? ??? ? ? ? ?head->pre=NULL; ?? ??? ? ? ? ? ?? ??? ? ? ?} ?? ??? ? ? ?else ? ? ? ? ? ? ? ?//創(chuàng)建雙向鏈表? ?? ??? ? ? ?{ ?? ??? ? ? ??? ?pr=p2; ? ? ? ? ?//pr是p的前驅(qū)結(jié)點? ?? ??? ? ? ??? ?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("| 保存成功!是否繼續(xù)? ?|"); ?? ??? ?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 file\n"); ?? ?} ?? ?while(!feof(fp)) ? ? ? ? // feof函數(shù)可以檢查文件讀寫位置標志是否移動到文件末尾,feof(fp)檢查fp所指向的文件是否結(jié)束,如果是? ?? ?{ ? ? ? ? ? ? ? ? ? ? ? ?//則函數(shù)值為真,否則為假,即“!feof(fp)”為真,在while循環(huán)中檢查 “!feof(fp)”為真,就執(zhí)行循環(huán)體? ?? ? ? n++; ?? ? ? p=(IAEP)malloc(M); ? //向內(nèi)存申請一段空間? ?? ? ? fread(p,M,1,fp); ? ? ?//從fp所指向的文件讀入1個大小為M的數(shù)據(jù),存儲到p所指向的空間中? ?? ? ? if(n==1)? ?? ? ? { ?? ? ? ? ?head=p; ?? ? ? ? ?p2=p; ?? ? ? ? ?head->pre=NULL; ?? ? ? ? ? ?? ? ? ?} ?? ? ? ?else ? ? ? ? ? ? ? ?//創(chuàng)建雙向鏈表? ?? ? ? ?{ ?? ? ? ??? ?pr=p2; ? ? ? ? ?//pr是p的前驅(qū)結(jié)點? ?? ? ? ??? ?p->pre=p2; ?? ? ? ??? ?p2->next=p; ?? ? ? ??? ?p2=p; ?? ??? ?} ?? ??? ?//printf("%d.%d.%-12d%c%-24f%s\n",p->year,p->month,p->day,p->ch,p->iae,p->source_or_aim); ? ? } ? ? fclose(fp); ? ? ? ? ? ? //關(guān)閉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%s\n",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%s\n",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%s\n",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("沒有找到相應(yīng)的信息~"); ?? ?} ?? ?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(); ? ? ? ? ? ? ? ? ?//調(diào)用ss()函數(shù),將該函數(shù)的返回值賦給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重新指向第一個結(jié)點,不要忘了? ?? ??? ?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%s\n",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,即沒有進入前面的搜索循環(huán),也就是沒有找到相應(yīng)的信息? ?? ??? ?{? ?? ??? ??? ?toxy(50,i); ?? ??? ??? ?printf("沒有找到相應(yīng)的信息!(按0返回,按1重新搜索)"); ?? ??? ??? ?while(1) ? ? ? ? ? ? ? //死循環(huán)是為了防止除0和1的其他按鍵干擾? ?? ??? ??? ?{ ?? ??? ??? ??? ?ch=getch(); ?? ??? ??? ??? ?if(ch=='0') ?? ??? ??? ??? ?{ ?? ??? ??? ??? ??? ?menu();break; ?? ??? ??? ??? ?} ?? ??? ??? ??? ?else if(ch=='1') ?? ??? ??? ??? ?{ ?? ??? ??? ??? ??? ?break; ?? ??? ??? ??? ?} ?? ??? ??? ?} ?? ??? ??? ?if(ch=='1') ? ? //如果輸入的ch等于1,則結(jié)束本次循環(huán)? ?? ??? ??? ? ? 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指向頭結(jié)點? ?? ??? ??? ?pr=NULL; ?? ??? ??? ?t=getch(); ? ? ? ? ? ? //輸入t? ?? ??? ??? ?if(t=='1') ? ? ? ? ? ? ? ? ? ? ? ? ? //如果輸入t=1,即選擇確認刪除選項? ?? ??? ??? ?{ ?? ??? ??? ??? ?while(p!=NULL&&p->num!=c) ?? ??? ??? ??? ?{ ?? ??? ??? ??? ??? ?pr=p; ? ? ? ? ? ? ? ? ? ? //pr記錄p的前驅(qū)結(jié)點? ?? ??? ??? ??? ??? ?p=p->next; ? ? ? ? ? ? ? //p指向下一節(jié)點? ?? ??? ??? ??? ?} ?? ??? ??? ??? ?if(p!=NULL) ?? ??? ??? ??? ?{ ?? ??? ??? ??? ??? ?if(pr==NULL) ? ? ? ? ? ? ? ?//如果pr=NULL,即刪除的結(jié)點為第一個結(jié)點? ?? ??? ??? ??? ??? ?{ ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?? ?? ??? ??? ??? ??? ??? ?head=p->next; ?? ??? ??? ??? ??? ?} ?? ??? ??? ??? ??? ?else ? ? ? ? ? ? ? ? ? ? ? ? //否則,刪除其他結(jié)點? ?? ??? ??? ??? ??? ?{ ?? ??? ??? ??? ??? ??? ?pr->next=p->next; ?? ??? ??? ??? ??? ?} ?? ??? ??? ??? ?} ?? ??? ??? ??? ?free(p); ? ? ? ? ? ? ? ? ?//釋放p? ?? ??? ??? ??? ?break; ? ? ? ? ? ? ? ? ? //跳出循環(huán)? ?? ??? ??? ?} ?? ??? ??? ?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) ? ? ? ? ? ? ? ? ? ?//死循環(huán)為了防止其他按鍵的干擾? ?? ??? ??? ??? ?{ ?? ??? ??? ??? ??? ?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"); ? ? ? ? ? ? ? ? ?//先清空原文件內(nèi)容再將修改后的信息寫入文件? ?? ??? ??? ?if(fp==NULL) ?? ??? ??? ?{ ?? ??? ??? ??? ?printf("cannot open file\n"); ?? ??? ??? ?} ?? ??? ??? ?if(fwrite(head,M,1,fp)!=1) ? ? ? ? ? ? ? ? //將head所指向的數(shù)據(jù)寫入fp所指向的文件? ?? ??? ??? ?{ ?? ??? ??? ??? ?printf("file write error\n"); ?? ??? ??? ?} ?? ??? ??? ?fclose(fp); ? ? ? ? ? ? ? ? ? ? ? ? //關(guān)閉文件 ?? ??? ??? ?if(head!=NULL) ? ? ? ? ? ? ? ? ? ? ? ?//如果頭指針不為空? ?? ??? ??? ?{ ?? ??? ??? ??? ?p=head->next; ? ? ? ? ? ? ? ?//使p指向第二個結(jié)點? ?? ??? ??? ??? ?fp=fopen(_name,"ab"); ? ? ? ? ?// 打開文件,方式為追加? ?? ??? ??? ??? ?while(p!=NULL) ? ? ? ? ? ? ? ? ? ?//p不為空就執(zhí)行循環(huán)體? ?? ??? ??? ??? ?{ ?? ??? ??? ??? ??? ?if(fwrite(p,M,1,fp)!=1) ? ? ? ? ? ?//將p所指向的1個大小為N的數(shù)據(jù)結(jié)構(gòu)寫入fp所指向的文件? ?? ??? ??? ??? ? ? ?{ ?? ??? ??? ??? ??? ?printf("file write error\n"); ?? ??? ??? ??? ? ? ?} ?? ??? ??? ??? ? ? ?p=p->next; ? ? ? ? ? ? ? ? ? ? //使p指向下一個結(jié)點? ?? ??? ??? ??? ?} ?? ??? ??? ??? ?fclose(fp); ? ? ? ? ? ? ?//關(guān)閉文件? ?? ??? ??? ?} ?? ??? ??? ?system("cls"); ?? ??? ??? ?system("color 75"); ?? ??? ??? ?toxy(48,16); ?? ??? ??? ?printf("正在刪除,請稍后...."); ?? ??? ??? ?Sleep(500); ?? ??? ??? ?system("cls"); ?? ??? ??? ?toxy(48,16); ?? ??? ??? ?printf("刪除成功!自動跳轉(zhuǎn)到菜單...."); ?? ??? ??? ?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) ? //將每個結(jié)點的p->num都賦為0,以免后面數(shù)據(jù)干擾? ?? ??? ?{ ?? ??? ??? ?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%s\n",j,p->year,p->month,p->day,p->ch,p->iae,p->source_or_aim); ?? ??? ??? ? ? ?p->num=j; ? ? ?//給p->num賦值,即給滿足搜索要求的結(jié)點編號? ?? ??? ??? ? ? ?i++; ?? ??? ??? ?} ?? ??? ??? ?p=p->next; ?? ??? ?} ?? ??? ?if(j==0) ? ? ? ? ? ? ? ? ? //如果j=0,即沒有進入前面的搜索循環(huán),也就是沒有找到相應(yīng)的信息? ?? ??? ?{? ?? ??? ??? ?toxy(50,i); ?? ??? ??? ?printf("沒有找到相應(yīng)的信息!(按0返回,按1重新搜索)"); ?? ??? ??? ?while(1) ? ? ? ? ? ? ? //死循環(huán)是為了防止除0和1的其他按鍵干擾? ?? ??? ??? ?{ ?? ??? ??? ??? ?ch=getch(); ? ?? ?? ??? ??? ??? ?if(ch=='0') ?? ??? ??? ??? ?{ ?? ??? ??? ??? ??? ?menu();break; ?? ??? ??? ??? ?} ?? ??? ??? ??? ?else if(ch=='1') ?? ??? ??? ??? ?{ ?? ??? ??? ??? ??? ?break; ?? ??? ??? ??? ?} ?? ??? ??? ?} ?? ??? ??? ?if(ch=='1') ? ? //如果輸入的ch等于1,則結(jié)束本次循環(huán)? ?? ??? ??? ? ? 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,即第一個結(jié)點? ?? ??? ?while(p!=NULL&&p->num!=c) ? ?//遍歷鏈表,尋找滿足要求的結(jié)點? ?? ??? ?{ ?? ??? ??? ?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) ? ?//死循環(huán)為防止其他按鍵干擾? ?? ??? ??? ?{ ?? ??? ??? ??? ?t=getch(); ?? ??? ??? ??? ?if(t=='1') ?? ??? ??? ??? ? ? break; ?? ??? ??? ??? ?else if(t=='2') ?? ??? ??? ??? ?{ ?? ??? ??? ??? ??? ?menu(); ?? ??? ??? ??? ?} ?? ??? ??? ? }? ?? ??? ??? ? if(t=='1') ?//如果t等于1,則跳出循環(huán)? ?? ??? ??? ? { ?? ??? ??? ? ?? ?break;? ?? ??? ??? ? } ?? ??? ?} ?? ?}while(1); ?? ?p=head; ? ? //p重新指向頭節(jié)點? ?? ?system("cls"); ?? ?toxy(44,12); ?? ?printf("正在修改...."); ?? ?fp=fopen(_name,"wb"); ? //打開文件的同時清除文件內(nèi)的內(nèi)容? ?? ?if(fp==NULL) ?? ?{ ?? ??? ?printf("cannot open file"); ?? ?} ?? ?while(p!=NULL) ?? ?{ ?? ??? ?if(fwrite(p,M,1,fp)!=1) ? ?//將p所指向的內(nèi)容存入fp所指向的文件中? ?? ??? ?{ ?? ??? ??? ?printf("file write error\n"); ?? ??? ?} ?? ??? ?p=p->next; ?? ?} ?? ?fclose(fp); ? ? //關(guān)閉文件? ?? ?Sleep(500); ?? ?system("cls"); ?? ?toxy(44,12); ?? ?printf("修改成功!正在自動跳轉(zhuǎn)到主菜單...."); ?? ?Sleep(500); ?? ?menu(); } ? ? void save_information(IAEP p) ? ?//保存信息? { ?? ?FILE *fp; ? ? ? //文件指針? ?? ?fp=fopen(_name,"ab"); ? ?//以追加的方式打開文件? ?? ?if(fp==NULL) ?? ?{ ?? ??? ?printf("cannot open file\n"); ?? ??? ? ?? ?} ?? ?if(fwrite(p,M,1,fp)!=1) ? ?//將p所指向的1個大小為M的數(shù)據(jù)結(jié)構(gòu)寫入fp所指向的文件中? ?? ?{ ?? ??? ?printf("file write error\n"); ?? ?} ?? ?fclose(fp); ? ? ? ?//關(guān)閉文件 ?}? ? 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; ? //調(diào)用函數(shù),進入菜單? ?? ??? ??? ?default :break; ?? ??? ?} ?? ?} } ? main() ? ? ?//簡單明了的主函數(shù)^~^? { ?? ?signin(); //調(diào)用函數(shù)? }
以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
C++回調(diào)函數(shù)實現(xiàn)計算器和qsort
這篇文章主要介紹了C++回調(diào)函數(shù)實現(xiàn)計算器和qsort,回調(diào)函數(shù)就是一個通過函數(shù)指針調(diào)用的函數(shù)。如果你把函數(shù)的指針(地址)作為參數(shù)傳遞給另一個函數(shù),當這個指針被用來調(diào)用其所指向的函數(shù)時,我們就說這是回調(diào)函數(shù)2022-08-08C++編寫的WebSocket服務(wù)端客戶端實現(xiàn)示例代碼
本文主要介紹了C++編寫的WebSocket服務(wù)端客戶端實現(xiàn)示例代碼,文中通過示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下2021-10-10