課程設計賬戶管理系統(2)

 

個人帳簿管理系統記錄某人每月的全部收入及各項開支情況,包括食品消費,房租,子女教育費用,水電費,醫療費,儲蓄等。進入系統後可以輸入和修改某月的收支情況,可以對每月的開支從小到大進行排序,可以根據輸入的月份查詢每月的收支情況。

 

#include <stdio.h>
#include <stdlib.h>
#include <string.h>


/*賬戶開支信息*/
struct Count{
	int month;         //月份

	float income;      //總收入
	float outcom;      //總支出

	float food;        //食品消費
	float rent;        //房租
	float education;   //子女教育費
	float water;       //水電費
	float hospital;    //醫療費
	float save;        //儲蓄
	float other;       //其他
};



/*個人賬戶每月詳細開支信息*/
struct Node;
typedef struct Node *pNode;
struct Node {
	struct Count acount;           //賬戶各項數據
	pNode nodelink;                    //賬戶按月開支的節點
};
typedef struct Node *LinkList;

/*已經存在的賬戶*/
struct CountList;
typedef struct CountList* PCountList;
struct CountList {
	char name[20];                 //賬戶名
	LinkList llink;                //指向賬戶每月賬單信息的頭節點
	PCountList pclink;             //指向下一個賬戶
};



void Menu();
void NewCount();
void SearchCount();
int IsCountExist(char* name);
void AddMonthData(PCountList pcount);
LinkList creatNullLinkList();
PCountList CreatNullCountList();


 

 

FILE *fp;
int i,mon;



PCountList CreatNullCountList() {
	PCountList pclist;
	pclist = (PCountList) malloc (sizeof (struct CountList));
	if (NULL == pclist) {
		printf ("新建賬戶內存出錯!\n");
		return NULL;
	}
	pclist->pclink = NULL;
	pclist->llink = creatNullLinkList();
	return pclist;
}


void NewCount(){
	PCountList pcount;
	pcount = CreatNullCountList();

	printf("輸入賬戶名:");
	scanf("%s",pcount->name);
	if (IsCountExist(pcount->name)){
		printf("賬戶已經存在!請進行其他操作!\n");
		return ;
	}
	else {
		fp = fopen(pcount->name,"w");
		fputs( "月份  食品消費  房   租  子女教育   水電費   醫 療    儲  蓄     其 他\n",fp);
		fclose(fp);
		printf("輸入月份數目:");
		scanf("%d",&mon);
		for(i=0;i<mon;i++) {
			AddMonthData(pcount);

		}

		/**/
	}
}


 

void Menu() {
	printf("\n\t\t\t\t主功能菜單   \t\t\t\t");
	printf("\n\t\t\t\t1.新建賬戶\t\t\t\t");
	printf("\n\t\t\t\t2.查詢賬戶\t\t\t\t");
	printf("\n\t\t\t\t3.      \t\t\t\t");
	printf("\n\t\t\t\t4.      \t\t\t\t");
	printf("\n\t\t\t\t5.      \t\t\t\t");
	printf("\n\t\t\t\t6.      \t\t\t\t");
	printf("\n\t\t\t\t0.退出程序 \t\t\t\t");

}


 

FILE* fp;
char ch;
int temp;





/*查看賬戶菜單*/
void LookCountMenu() {
	printf("\n\t\t\t\t   查詢菜單              \t\t\t\t");
	printf("\n\t\t\t\t1.查詢全部開支   \t\t\t\t\t");
	printf("\n\t\t\t\t2.添加某月開支   \t\t\t\t\t");
	printf("\n\t\t\t\t3.修改某月開支   \t\t\t\t\t");
	printf("\n\t\t\t\t4.對月總支出排序\t\t\t\t\t");
	printf("\n\t\t\t\t5.查詢某月開支   \t\t\t\t\t");
	printf("\n\t\t\t\t0.返回                   \t\t\t\t\t");
}

/*按月份查詢收支情況*/
void LookMonthData() {

}




/*按月份重置收支情況*/
void ResetMonthData() {

}


/*按月支出排序而從小到大*/
void SortOutcomeData() {

}


/*查看全部的開支情況*/
void LookCount(char *name) {
	fp = fopen(name,"r");
	while((ch=getc(fp)) != EOF)
		printf("%c",ch);
	fclose(fp);
}





void SearchCount() {
	//char name[20];
	PCountList pcount;
	pcount = CreatNullCountList();
	while(1){
		printf("\n輸入要查找的賬戶:");
		scanf("%s",pcount->name);
		if((fp = fopen(pcount->name,"r")) == NULL)
			printf("\n賬戶不存在,請覈對後重先輸入!");
		else {
			fclose(fp);
			break;
		}
	}

	while(1) {
		LookCountMenu();
		printf("\n選擇菜單:");
		scanf("%d",&temp);
		switch (temp) {
			case 0:
				return;
			case 1:
				LookCount(pcount->name);
				break;
			case 2:
				AddMonthData(pcount);
				break;
			case 3:
				ResetMonthData();
				break;
			case 4:
				SortOutcomeData();
				break;
			case 5:
				LookMonthData();
				break;

		}
	}
}


 

/*判斷賬戶是否存在*/
int IsCountExist(char* name) {
	FILE *fp;
	if((fp = fopen(name,"r")) != NULL)
		return 1;
	else
		return 0;
}


 

 

FILE *fp;

/*爲賬戶信息頭結點們配空間*/
LinkList creatNullLinkList(){
	LinkList llist;
	llist = (LinkList) malloc (sizeof (struct Node));
	if (NULL == llist) {
		printf ("memory allocation error!\n");
		return NULL;
	}
	llist->nodelink = NULL;

	return llist;
}


/*按月添加數據*/
pNode InsertCountData(char *name) {
	pNode p = (pNode) malloc (sizeof (struct Node));
	if (p == NULL){
		printf ("內存出錯!返回\n");
		return NULL;
	}

	/*輸入各項開支*/
	printf("%s","輸入月份:");
	scanf("%d",&p->acount.month);       /*需在這兒增加判斷功能,如果輸入的月份已經存在則返回*/
	//if ();
	printf("%20s","輸入食品消費:");
	scanf("%f",&p->acount.food);
	printf("%20s","輸入房租:");
	scanf("%f",&p->acount.rent);
	printf("%20s","輸入子女教育費:");
	scanf("%f",&p->acount.education);
	printf("%20s","輸入水電費:");
	scanf("%f",&p->acount.water);
	printf("%20s","輸入醫療費:");
	scanf("%f",&p->acount.hospital);
	printf("%20s","輸入儲蓄費:");
	scanf("%f",&p->acount.save);
	printf("%20s","輸入其他費用:");
	scanf("%f",&p->acount.other);
	/*把剛添加的數據寫入到文件*/
	fp = fopen(name,"a");
	fprintf(fp,"%-4d%9.2f%9.2f%9.2f%9.2f%9.2f%9.2f%9.2f\n",
			p->acount.month,p->acount.food,p->acount.rent,
			p->acount.education,p->acount.water,p->acount.hospital,
			p->acount.save,p->acount.other);
	fclose(fp);
	return p;
}

/*按月份添加收支情況*/
void AddMonthData(PCountList pcount) {
	pNode mlink;     //按月鏈表
	mlink = creatNullLinkList();
	mlink = InsertCountData(pcount->name);
	if (mlink == NULL){
		return ;
	}
	while(pcount->llink->nodelink != NULL ) {
		pcount->llink->nodelink = pcount->llink->nodelink->nodelink;
	}
	pcount->llink->nodelink = mlink;
	pcount->llink->nodelink->nodelink = NULL;
	free(mlink);
}


 

int main() {
	int n;

	while(1){
		Menu();
		printf("\n選擇菜單:");
		scanf("%d",&n);
		//n = atoi(ch);
		switch(n) {
		case 1:
			NewCount();
			break;
		case 2:
			SearchCount();
			break;
		case 0:
			exit(0);
		default:
			printf("\n輸入錯誤!");
			break;
		}
	}

	return 0;
}


第二天寫得代碼

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章