欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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語言堆棧幀的介紹與創(chuàng)建

    C語言堆棧幀的介紹與創(chuàng)建

    這篇文章主要給大家介紹了關(guān)于C語言堆棧幀的相關(guān)資料,堆棧幀 (stack frame)( 或活動記錄 (activation Tecord)) 是一塊堆棧保留區(qū)域,用于存放被傳遞的實際參數(shù)、子程序的返回值、局部變量以及被保存的寄存器,需要的朋友可以參考下
    2021-08-08
  • 詳細分析c++ const 指針與指向const的指針

    詳細分析c++ const 指針與指向const的指針

    這篇文章主要介紹了c++ const 指針與指向const的指針的相關(guān)資料,文中示例代碼非常詳細,幫助大家更好的理解和學(xué)習(xí),感興趣的朋友可以了解下
    2020-07-07
  • EasyC++?右值引用

    EasyC++?右值引用

    這篇文章主要介紹了C++?右值引用,右值引用指的是以引用傳遞(而非值傳遞)的方式使用?C++?右值,下面文章將對此詳細介紹,需要的朋友可以參考一下,希望對你有所幫助
    2021-12-12
  • C++中引用&與取地址&的區(qū)別分析

    C++中引用&與取地址&的區(qū)別分析

    這篇文章主要介紹了C++中引用&與取地址&的區(qū)別,有助于C++初學(xué)者更好的掌握指針的概念及用法,需要的朋友可以參考下
    2014-09-09
  • C語言的指針類型詳細解析

    C語言的指針類型詳細解析

    C語言的指針類型包括兩方面的信息:一是地址,存放在指針變量中;二是類型信息,關(guān)乎于讀寫的長度,沒有存儲在指針變量中,位于用該指針讀寫時的mov指令中,不同的讀寫長度對應(yīng)的mov指令不同
    2013-09-09
  • QT實現(xiàn)制作一個ListView列表的示例代碼

    QT實現(xiàn)制作一個ListView列表的示例代碼

    這篇文章主要為大家詳細介紹了如何使用Qt制作一個ListView,點擊ListView的Item可以用于測試OpenCV的各種效果,感興趣的小伙伴可以了解一下
    2023-02-02
  • C++回調(diào)函數(shù)實現(xiàn)計算器和qsort

    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-08
  • C++編寫的WebSocket服務(wù)端客戶端實現(xiàn)示例代碼

    C++編寫的WebSocket服務(wù)端客戶端實現(xiàn)示例代碼

    本文主要介紹了C++編寫的WebSocket服務(wù)端客戶端實現(xiàn)示例代碼,文中通過示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-10-10
  • C++中左值和右值的區(qū)別詳解

    C++中左值和右值的區(qū)別詳解

    大家好,本篇文章主要講的是C++中左值和右值的區(qū)別詳解,感興趣的同學(xué)趕緊來看一看吧,對你有幫助的話記得收藏一下
    2022-01-01
  • C++中double浮點數(shù)精度丟失的深入分析

    C++中double浮點數(shù)精度丟失的深入分析

    這篇文章主要給大家介紹了關(guān)于C++中double浮點數(shù)精度丟失的相關(guān)資料,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-01-01

最新評論