栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

【家庭财务管理系统】

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

【家庭财务管理系统】

#include 
#include //其中包含system函数
#include //定义了通过控制台进行 数据输入 和数据输出的函数,如getch函数。
#include //定义字符数组
#include 
#include 
#include 
using namespace std;

char special_name[20];
typedef struct User{
	int num;
	char name[20];
	char password[20];
	int qx;
	User *next;
}user;
typedef struct Bill{
	char date[20];
	char name[20];
	double zc;
	double sr;
	Bill *next;	
}bill;
typedef struct Bill1{
	char name[20];
	double zc;
	double sr;
	double hj;
}bill1;
typedef struct Bill2{
	char date[20];
	char name[20];
	double zc;
	double sr;
	double hj;
}bill2;

void menu();//登录界面 
void usermenu1();//管理员界面 
void usermenu2();//普通成员界面 

void zjzd();//增加账单信息; √ 
void zjcy();//增加成员;√ 

void sczd();//删除账单信息;√ 
void sccy();//删除成员;(删除对应账单信息) √ 

void cx_0();//查询所有成员信息并排序; 
void cx_1();//查询规定日期内个人收支信息; 

void xgcy();//修改成员姓名,密码,权限;√ 
void xgzd();//修改账单信息;√ 
void xgmm();//修改密码 √ 

void ckcy();//查看成员信息 
int tjbill();//统计账单数目 
int tjuser();//统计用户数目

void quicksort1();
void quicksort2();
void quicksort3();

void ckcy(){//查看成员信息 
	system("cls");
	printf("成员信息*************************n");
	FILE *fp;
	fp=fopen("user.txt","r");
	int num,qx;
	char name[20],password[20];
	printf("  编号     姓名     密码     权限n");
	int n=tjuser();
	for(int i=1;i<=n;i++){
		fscanf(fp,"%d%s%s%d",&num,name,password,&qx);
		printf("%4d%10s%10s%8dn",num,name,password,qx);
	}
	fclose(fp);
	printf("按任意键退出...");
	getch();
	usermenu1();
} 

int zjcy_match(char name[20]){//匹配成员信息 
	FILE *fp;
	fp=fopen("user.txt","r");
	int num1,qx1;
	char name1[20],password1[20];
	while(!feof(fp)){
		fscanf(fp,"%d%s%s%d",&num1,name1,password1,&qx1);
		if(strcmp(name,name1)==0){
			return 0;
		}
	}
	return 1;
}
void zjcy() {//增加成员;
	FILE *fp;
	char i; 
	int num=1;
	char name[20],password[20];
	int qx;
	int flag2=1;
    system("cls");
    fp=fopen("user.txt","r");
    int sum=0;
	while(!feof(fp)){//统计现在有多少用户; 
		//printf("1"); 
    	fscanf(fp,"%d%s%s%d",&num,name,password,&qx);
    	sum++;
	}
	fp=fopen("user.txt","a");
	printf("n请按以下格式输入用户信息:n姓名 权限n");
	while(true){
		scanf("%s %d",name,&qx);
		num=sum;
		password[0]='1',password[1]='2',password[2]='3',password[3]='';
		int flag1=zjcy_match(name);
		if(flag1){
			fprintf(fp,"%d %s %s %dn",num,name,password,qx); 
			flag2=1;
		}
		else{
			printf("用户已存在n"); 
			flag2=0;
		}
		printf("[如果继续输入请按回车否则按esc]");
		i=getch();printf("n");
		if(i==27){
    		break;
		}
		else if(i==13&&flag2) {
			sum++;
			continue;
		}
	}
	fclose(fp);
	printf("按任意键返回..."); 
	getch();
	usermenu1();
}

int zjzd_match_user(char name1[20]){
	FILE *fp;
	fp=fopen("user.txt","r");
	char name[20],password[20];
	int num,qx;
	while(!feof(fp)){
		 fscanf(fp,"%d%s%s%d",&num,name,password,&qx);
		 if(strcmp(name,name1)==0){
		 	fclose(fp);
		 	return 1;
		 }
	}
	return 0;
} 
int zjzd_match(char date1[20],char name1[20]){//账单匹配函数 
	FILE *fp;
	fp=fopen("bill.txt","r");
	char date[20],name[20];
	double sr,zc;
	while(!feof(fp)){
		fscanf(fp,"%s%s%lf%lf",date,name,&sr,&zc);
		if(strcmp(name,name1)==0&&strcmp(date1,date)==0){
			fclose(fp);
			return 1;
			break;
		}
	}
	fclose(fp);
	return 0;
} 
void zjzd_add(char date[20],char name[20],double sr,double zc){//账单修改函数 
	FILE *fp;
	char date1[20],name1[20];
	double sr1,zc1;
	bill *head,*p,*p1;
	head=(bill *)malloc(sizeof(bill));
	head->next=NULL;
	fp=fopen("bill.txt","r");
	int n=tjbill();
	p=head;
	for(int i=1;i<=n;i++)
    {
    	//printf("1");
		fscanf(fp,"%s %s %lf %lf",date1,name1,&sr1,&zc1);
       	if(strcmp(date,date1)==0&&strcmp(name,name1)==0){
       		sr1+=sr;
       		zc1+=zc;
       	}
		p1=(bill*)malloc(sizeof(bill));
			strcpy(p1->date,date1);
	        strcpy(p1->name,name1);
	       	p1->sr=sr1;
	       	p1->zc=zc1;
		p1->next=p->next;
		p->next=p1;
		p=p1;
	}
	fp=fopen("bill.txt","w");//清空文件,只写打开,然后关闭
	fclose(fp);
    fp=fopen("bill.txt","a");//追加文件
    p=head->next;
    while(p!=NULL)//把链表内容覆盖到文件
   	{
   		fprintf(fp,"%s %s %lf %lfn",p->date,p->name,p->sr,p->zc);
   	   	p1=p; 
		p=p->next;
		free(p1);
	}
    fclose(fp);
    //system ("cls"); 	
}
void zjzd_or(){//普通成员增加账单 

	FILE *fp;
	char date[20],i;
	char name[20];
	double sr,zc;
    system("cls");
    printf("n请按以下格式输入用户信息:(日期格式:年-月-日)n   日期   收入 支出 n");
	fp=fopen("bill.txt","a");
	while(true){
		cin>>date>>sr>>zc;
		fprintf(fp,"%s %s %lf %lfn",date,special_name,sr,zc);
		printf("[如果继续输入请按回车否则按esc]");//esc 27;
		i=getch();printf("n");
		if(i==13) continue;
		else if(i==27) break;
	}
	fclose(fp);
	printf("添加成功n按任意键继续...");
	getch();
	usermenu2();
}
void zjzd(){//增加账单 
	FILE *fp;
	char date[20],i;
	char name[20];
	double sr,zc;
    system("cls");
    printf("n请按以下格式输入用户信息:(日期格式:年-月-日)n   日期   姓名  收入 支出 n");
	fp=fopen("bill.txt","a");
	//printf("请输入:");
	while(true){
		cin>>date>>name>>sr>>zc;
		int flag=zjzd_match(date,name);
		int flag1=zjzd_match_user(name);
		if(flag1){
			if(flag){
				zjzd_add(date,name,sr,zc);
				printf("添加成功"); 
			}
			else{
				fprintf(fp,"%s %s %lf %lfn",date,name,sr,zc);
				printf("添加成功"); 
			}
			printf("[如果继续输入请按回车否则按esc]");//esc 27;
			i=getch();printf("n");
			if(i==13) continue;
			else if(i==27) break;
		}
		else{
			printf("n用户不存在n");
			printf("[如果继续输入请按回车否则按esc]");//esc 27;
			i=getch();printf("n");
			if(i==13) continue;
			else if(i==27) break;
		}
	}
	fclose(fp);
	printf("按任意键继续...");
	getch();
	usermenu1();
}

int match_name_password(char name[20],char password[20]) {//密码核对函数
	FILE*fp;
	int n=0,i=0;
	int num,qx;
	char name1[20];
	char password1[20];
	fp=fopen("user.txt","r");
    for(;!feof(fp);)
	{
    	fscanf(fp,"%d%s%s%d",&num,name1,password1,&qx);
    	if(strcmp(name1,name)==0)
    		{
        		if(strcmp(password1,password)==0)
					return qx;//登录成功 
				else
				{
					return -1;//密码错误 
				}
			}
	}
	return 0;//用户不存在 
}
void land(){//登录系统 
	system("cls");
	int flag;
	char name[20];
	char password[20];
	printf("请输入您的登录信息n用户名:");
	scanf("%s",name);
	printf("密码:");
	scanf("%s",password);
	flag=match_name_password(name,password); 
	if(flag>0){
		if(flag==1) usermenu1();
		else{
			strcpy(special_name,name);
			usermenu2();
		} 
	}
	if(flag==-1){
		printf("密码错误n(按回车重新输入,退出按esc)!");
		char i=getch();
		if(i==13) land();
		if(i==27) menu(); 
	}
	if(flag==0){
		printf("用户不存在n按任意键继续...");
		getch();
		menu();
	}	
}

void sswap(bill1 *a,bill1 *b){//交换结构体 
	bill1 t;
	strcpy(t.name,a->name);
	t.sr=a->sr;
	t.zc=a->zc;
	t.hj=a->hj;
	strcpy(a->name,b->name);
	a->sr=b->sr;
	a->zc=b->zc;
	a->hj=b->hj;
	strcpy(b->name,t.name);
	b->sr=t.sr;
	b->zc=t.zc;
	b->hj=t.hj;
}
void BubbleSort1(bill1 user_bill1[],int numuser){//冒泡排序(收入) 
	for(int i=0;ii;j--){
			if (user_bill1[j].sri;j--){
			if (user_bill1[j].zci;j--){
			if (user_bill1[j].hj=0;i--)
		printf("n %5s   %10.2lf   %10.2lf   %10.2lf",user_bill1[i].name,user_bill1[i].sr,user_bill1[i].zc,user_bill1[i].hj);
	printf("n继续查询请按回车,退出按esc...");
	char h=getch();
	if(h==13) cx_0_dba();
	else usermenu1();
}
void cx_0_or(){//查看所有成员收支排名
	system("cls"); 
	FILE *fp1,*fp2;
	fp1=fopen("user.txt","r");
	//fp2=fopen("bill.txt","r");
	int num,qx;
	char name[20],name_1[20],password[20];
	char date[20];
	double sr,zc,hj;
	int numuser = tjuser();
	int numbill = tjbill();
	bill1 user_bill1[numuser];
	for(int i=1;i<=numuser;i++){
		fscanf(fp1,"%d%s%s%d",&num,name,password,&qx);
		strcpy(user_bill1[num-1].name,name);
		fp2=fopen("bill.txt","r");
 		for(int j=1;j<=numbill;j++){
			fscanf(fp2,"%s%s%lf%lf",date,name_1,&sr,&zc);
			if(strcmp(name_1,name)==0){
				user_bill1[num-1].sr+=sr;
				user_bill1[num-1].zc+=zc;
				user_bill1[num-1].hj+=sr-zc;
			}
		}
		fclose(fp2);
	}
	printf("请按选择排序参数:1.收入 2.支出 3.合计");
	printf("n请选择:");
	int i; scanf("%d",&i);
	if(i==1) BubbleSort1(user_bill1,numuser);//quicksort1(user_bill1,0,numuser-1);
	if(i==2) BubbleSort2(user_bill1,numuser);//quicksort2(user_bill1,0,numuser-1);
	if(i==3) BubbleSort3(user_bill1,numuser);//quicksort3(user_bill1,0,numuser-1);	
	printf("   姓名        收入         支出         合计:");
	for(int i=numuser-1;i>=0;i--)
		printf("n %5s   %10.2lf   %10.2lf   %10.2lf",user_bill1[i].name,user_bill1[i].sr,user_bill1[i].zc,user_bill1[i].hj);
	printf("n继续查询请按回车,退出按esc...");
	char h=getch();
	if(h==13) cx_0_or();
	else usermenu2();
}

void quicksort_1(bill2 user_bill2[],int low,int high){//快速排序(收入) 
	int i = low;
	int j = high;
	bill2 t;
	strcpy(t.date,user_bill2[i].date);
	strcpy(t.name,user_bill2[i].name);
	t.sr=user_bill2[i].sr;
	t.zc=user_bill2[i].zc;
	t.hj=user_bill2[i].hj;
	if(i>=j) return ;
	while(ii&&strcmp(user_bill2[j].date,t.date)>=0){
			j--;
		}
		strcpy(user_bill2[i].date,user_bill2[j].date);
		strcpy(user_bill2[i].name,user_bill2[j].name);
		user_bill2[i].sr=user_bill2[j].sr;
		user_bill2[i].zc=user_bill2[j].zc;
		user_bill2[i].hj=user_bill2[j].hj;
		while(i=0&&strcmp(date,date1)>=0){ 
				strcpy(user_bill2[++num].date,date);
				strcpy(user_bill2[num].name,name);
				user_bill2[num].sr=sr;
				user_bill2[num].zc=zc;
				user_bill2[num].hj=sr-zc;
			}
		}
	}
	quicksort_1(user_bill2,0,num);
	double sr0,zc0,hj0;
	for(int i=0;i<=num;i++){
		sr0+=user_bill2[i].sr;
		zc0+=user_bill2[i].zc;
		hj0+=user_bill2[i].hj; 
		printf("n%10s %5s   %10.2lf   %10.2lf   %10.2lf",user_bill2[i].date,user_bill2[i].name,user_bill2[i].sr,user_bill2[i].zc,user_bill2[i].hj);
	}
	printf("n      合计:       %10.2lf   %10.2lf   %10.2lf",sr0,zc0,hj0);
	printf("n继续查询请按回车,退出按esc..."); 
	i=getch();
	if(i==13) cx_1_dba();
	else usermenu1();
}
void cx_1_or(){查询一定时间内的收支明细 (or)
	system("cls"); 
	FILE *fp;
	if ((fp=fopen("bill.txt","r"))==NULL)//打开文件
    {
	    system ("cls");
        printf("n记录文件不存在!按任意键返回");
  		getch();
    }
    char name[20],name1[20];
    char i;
    char date[20],date1[20],date2[20];
	double sr,zc,hj;
	int num=-1;int numbill=tjbill();
	bill2 user_bill2[numbill];
    strcpy(name,special_name);
	printf("个人账单查询:***********************n");
	printf("请输入起始日期:");
	scanf("%s",date1);
	printf("请输入截止日期:");
	scanf("%s",date2);
	printf("查询请按回车");
	i=getch();
	if(i==13){
		printf("n    日期    姓名        收入        支出        合计:");
		//fp=fopen("bill.txt","r");
		int n=numbill;
		for(int i=1;i<=n;i++){
			fscanf(fp,"%s%s%lf%lf",date,name1,&sr,&zc);
    		if(strcmp(name,name1)==0&&strcmp(date2,date)>=0&&strcmp(date,date1)>=0){ 
				strcpy(user_bill2[++num].date,date);
				strcpy(user_bill2[num].name,name);
				user_bill2[num].sr=sr;
				user_bill2[num].zc=zc;
				user_bill2[num].hj=sr-zc;
			}
		}
	}
	quicksort_1(user_bill2,0,num);
	double sr0,zc0,hj0;
	for(int i=0;i<=num;i++){
		sr0+=user_bill2[i].sr;
		zc0+=user_bill2[i].zc;
		hj0+=user_bill2[i].hj; 
		printf("n%10s %5s   %10.2lf   %10.2lf   %10.2lf",user_bill2[i].date,user_bill2[i].name,user_bill2[i].sr,user_bill2[i].zc,user_bill2[i].hj);
	}
	printf("n      合计:       %10.2lf   %10.2lf   %10.2lf",sr0,zc0,hj0);
	printf("n继续查询请按回车,退出按esc..."); 
	i=getch();
	if(i==13) cx_1_or();
	else usermenu2();
}

int tjuser(){//统计用户数目 
	FILE *fp;
	fp=fopen("user.txt","r");
	int n=0;
	int num,qx;
	char name[20],password[20];
	while(!feof(fp)){
		fscanf(fp,"%d%s%s%d",&num,name,password,&qx);
		n++;
	}
	n--;
	return n;
}
void xguser(int num,char name[20],char password[20],int qx) { //修改用户信息函数
	FILE *fp;
	int num1,qx1;
	char name1[20],password1[20];
	user *head,*p,*p1;
	head=(user *)malloc(sizeof(user));
	head->next=NULL;
	fp=fopen("user.txt","r");
	int n=tjuser();
	p=head; 
	for (int i=1;i<=n;i++)
    {
    	//printf("1");
		fscanf(fp,"%d %s %s %d",&num1,name1,password1,&qx1);
       	if(num==num1){
       		num1=num;
       		strcpy(name1,name);
       		strcpy(password1,password);
       		qx1=qx; 
       	}
		p1=(user*)malloc(sizeof(user));
			p1->num=num1;
	        strcpy(p1->password,password1);//复制账号密码
	       	strcpy(p1->name,name1);
	       	p1->qx=qx1;
		p1->next=p->next;
		p->next=p1;
		p=p1;
	}
	fp=fopen("user.txt","w");//清空文件,只写打开,然后关闭
	fclose(fp);
    fp=fopen("user.txt","a");//追加文件
    p=head->next;
    while(p!=NULL)//把链表内容覆盖到文件
   	{
   		fprintf(fp,"%d %s %s %dn",p->num,p->name,p->password,p->qx);
   	   	p1=p;
		free(p1); 
		p=p->next;
	}
    fclose(fp);
    //system ("cls");
    //printf("修改成功!"); 
}
void xgcy_bill(char name[20],char nname[20]){// 账单修改函数 
	FILE *fp;
	double sr1,zc1;
	char date2[20],name2[20];
	bill *head,*p,*p1;
	head=(bill *)malloc(sizeof(bill));
	head->next=NULL;
	fp=fopen("bill.txt","r");
	int n=tjbill();
	p=head;
	for(int i=1;i<=n;i++)
    {
    	//printf("1");
		fscanf(fp,"%s %s %lf %lf",date2,name2,&sr1,&zc1);
       	if(strcmp(name,name2)==0){
       		strcpy(name2,nname);
       	}
		p1=(bill*)malloc(sizeof(bill));
			strcpy(p1->date,date2);
	        strcpy(p1->name,name2);
	       	p1->sr=sr1;
	       	p1->zc=zc1;
		p1->next=p->next;
		p->next=p1;
		p=p1;
	}
	fp=fopen("bill.txt","w");//清空文件,只写打开,然后关闭
	fclose(fp);
    fp=fopen("bill.txt","a");//追加文件
    p=head->next;
    while(p!=NULL)//把链表内容覆盖到文件
   	{
   		fprintf(fp,"%s %s %lf %lfn",p->date,p->name,p->sr,p->zc);
   	   	p1=p; 
		p=p->next;
		free(p1);
	}
    fclose(fp);
    //system ("cls");
    printf("修改成功!"); 
}
void xgcy(){//修改成员信息
	system("cls");
	FILE *fp;
	char name[20],name1[20],nname[20];
	char password[20],npassword[20];
	int num,qx,nqx;
	printf("请输入所修改成员姓名:");
	scanf("%s",name);
	fp=fopen("user.txt","r");
	while(!feof(fp)){
		fscanf(fp,"%d%s%s%d",&num,name1,password,&qx);
		if(strcmp(name,name1)==0){
			printf("修改内容:1.姓名 2.密码 3.权限n");
			printf("请选择:");int i;scanf("%d",&i);
			if(i==1){
				printf("请输入更改后的姓名:");
				scanf("%s",nname);
				xguser(num,nname,password,qx);
				xgcy_bill(name,nname);
				break; 
			}
			else if(i==2){
				printf("请输入更改后的密码:");
				scanf("%s",npassword);
				xguser(num,name,npassword,qx);
				break;
			}
			else{
				printf("权限更改为:1.管理员 2.普通成员");
				scanf("%d",&nqx);
				xguser(num,name,password,nqx);
				break; 
			}
		}
	}
	printf("n按任意键继续...");getch();
	usermenu1();
	//printf("用户不存在"); 
}

void xgmm_1(char name[20],char password[20]){//修改密码函数 
	FILE *fp;
	fp=fopen("user.txt","r");
	int num,qx;
	char name1[20],password1[20];
	while(!feof(fp)){
		fscanf(fp,"%d%s%s%d",&num,name1,password1,&qx);
		if(strcmp(name,name1)==0){
			xguser(num,name,password,qx);
			break;
		}
	}
}
void xgmm(){//修改密码 
	system("cls"); 
	printf("修改密码*************************************n");
	printf("请输入用户名:");
	char name[20];
	char password[20],password1[20];
	scanf("%s",name);
	int flag2=match_name_password(name,password);
	if(flag2==0){
		system("cls");
		printf("用户不存在n继续输入请按回车,按任意键退出...n");
		char i=getch();
		if(i==13){
			xgmm();
			return ;
		}
		else return ;
	}
	int flag1; 
	while(true){
		printf("请输入旧密码:");
		scanf("%s",password);
		flag1=match_name_password(name,password); 
		if(flag1==-1){
			printf("密码错误,继续输入请按回车,按任意键退出...n");
			char i=getch();
			if(i==13) continue;
			else break; 
		}
		if(flag1==1||flag1==2){
			system("cls"); 
			printf("验证成功n");
			while(true){
				printf("请输入新密码:");
				scanf("%s",password);
				printf("请再次输入密码:");
				scanf("%s",password1);
				if(strcmp(password,password1)==0){
					xgmm_1(name,password);//调用修改函数 ----------
					break; 
				}
				else{
					printf("密码输入有误!");
					printf("继续输入请按回车,退出按escn");
					char ii=getch();
					if(ii==13){
						system("cls");
						continue;
					}
					else break; 
				}
			}
		}
		break;
	}
	printf("n按任意键继续...");getch();
	usermenu2();	
}
void xgmm_or(){//成员单独修改密码 
	system("cls"); 
	printf("修改密码*************************************n");
	char name[20];
	char password[20],password1[20];
	int flag1; 
	while(true){
		printf("请输入旧密码:");
		scanf("%s",password);
		flag1=match_name_password(special_name,password); 
		if(flag1==-1){
			printf("密码错误,继续输入请按回车,按任意键退出...n");
			char i=getch();
			if(i==13) continue;
			else break; 
		}
		if(flag1==1||flag1==2){
			system("cls"); 
			printf("验证成功n");
			while(true){
				printf("请输入新密码:");
				scanf("%s",password);
				printf("请再次输入密码:");
				scanf("%s",password1);
				if(strcmp(password,password1)==0){
					xgmm_1(special_name,password);//调用修改函数 ----------
					break; 
				}
				else{
					printf("密码输入有误!");
					printf("继续输入请按回车,退出按escn");
					char ii=getch();
					if(ii==13){
						system("cls");
						continue;
					}
					else break; 
				}
			}
		}
		break;
	}
	printf("n按任意键继续...");getch();
	usermenu2();	
}

int match_bill(char date[20],char name[20]){//匹配账单信息 
	FILE *fp;
	fp=fopen("bill.txt","r");
	char name1[20],date1[20];
	double sr,zc; 
	while(!feof(fp)){
		fscanf(fp,"%s %s %lf %lf",date1,name1,&sr,&zc);
		if(strcmp(date,date1)==0&&strcmp(name,name1)==0){
			fclose(fp);
			return 1;
		}
	}
	fclose(fp);
	return 0;
}
void xgbill(char date[20],char name[20],char date1[20],double sr,double zc){// 账单修改函数 
	FILE *fp;
	double sr1,zc1;
	char date2[20],name2[20];
	bill *head,*p,*p1;
	head=(bill *)malloc(sizeof(bill));
	head->next=NULL;
	fp=fopen("bill.txt","r");
	int n=tjbill();
	p=head;
	for(int i=1;i<=n;i++)
    {
    	//printf("1");
		fscanf(fp,"%s %s %lf %lf",date2,name2,&sr1,&zc1);
       	if(strcmp(date,date2)==0&&strcmp(name,name2)==0){
       		strcpy(date2,date1);
       		sr1=sr;zc1=zc;
       	}
		p1=(bill*)malloc(sizeof(bill));
			strcpy(p1->date,date2);
	        strcpy(p1->name,name2);
	       	p1->sr=sr1;
	       	p1->zc=zc1;
		p1->next=p->next;
		p->next=p1;
		p=p1;
	}
	fp=fopen("bill.txt","w");//清空文件,只写打开,然后关闭
	fclose(fp);
    fp=fopen("bill.txt","a");//追加文件
    p=head->next;
    while(p!=NULL)//把链表内容覆盖到文件
   	{
   		fprintf(fp,"%s %s %lf %lfn",p->date,p->name,p->sr,p->zc);
   	   	p1=p; 
		p=p->next;
		free(p1);
	}
    fclose(fp);
    //system ("cls");
    printf("修改成功!"); 
}
void xgzd(){//修改账单信息
	system("cls");
	FILE *fp;
	fp=fopen("bill.txt","r");
	char date[20],date1[20];
	char name[20];
	double sr,zc;
	printf("修改账单信息*****************************n"); 
	while(true){
		printf("请输入用户名:");
		scanf("%s",name);
		printf("请输入日期:");
		scanf("%s",date);
		int flag1=match_bill(date,name);
		if(flag1==1){
			//system("cls");
			printf("请输入修改后的账单信息:n");
			printf("  日期   收入  支出n");
			scanf("%s %lf %lf",date1,&sr,&zc);
			xgbill(date,name,date1,sr,zc);
			break;//>
		}
		if(flag1==0){
			printf("未查询到账单信息"); 
			break;//>
		}
	}
	//<
	printf("按任意键继续...");getch();
	usermenu1();
}

void sczd_bill(char date[20],char name[20]){//删除账单信息函数 
	FILE *fp;
	char date1[20],name1[20];
	double sr1,zc1;
	bill *head,*p,*p1;
	head=(bill *)malloc(sizeof(bill));
	head->next=NULL;
	fp=fopen("bill.txt","r");
	int n=tjbill();
	p=head;
	for(int i=1;i<=n;i++)
    {
    	//printf("1");
		fscanf(fp,"%s %s %lf %lf",date1,name1,&sr1,&zc1);
       	if(strcmp(date,date1)==0&&strcmp(name,name1)==0){
       		continue;
       	}
		p1=(bill*)malloc(sizeof(bill));
			strcpy(p1->date,date1);
	        strcpy(p1->name,name1);
	       	p1->sr=sr1;
	       	p1->zc=zc1;
		p1->next=p->next;
		p->next=p1;
		p=p1;
	}
	fp=fopen("bill.txt","w");//清空文件,只写打开,然后关闭
	fclose(fp);
    fp=fopen("bill.txt","a");//追加文件
    p=head->next;
    while(p!=NULL)//把链表内容覆盖到文件
   	{
   		fprintf(fp,"%s %s %lf %lfn",p->date,p->name,p->sr,p->zc);
   	   	p1=p; 
		p=p->next;
		free(p1);
	}
    fclose(fp);
    //system ("cls");
    printf("删除成功!"); 
}
void sczd(){//删除账单信息 
	system("cls");
	char name[20],date[20];
	double sr,zc; 
	printf("请输入要删除账单信息:n");
	printf("请输入用户名:");scanf("%s",name);
	printf("请输入日期:");scanf("%s",date);
	int flag1=match_bill(date,name);
	if(flag1){
		sczd_bill(date,name);
	}
	else{
		printf("账单不存在!"); 
	}
	printf("n若继续删除请按回车,退出请按esc...");
	char i=getch();
	if(i==13){
		sczd();
	} 
	else {
		usermenu1();
	}
} 

int sccy_match(char name[20]){//成员信息匹配函数 
	FILE *fp;
	char name1[20],password[20];
	int num,qx;
	fp=fopen("user.txt","r");
	while(!feof(fp)){
		fscanf(fp,"%d%s%s%d",&num,name1,password,&qx);
		if(strcmp(name1,name)==0){
			fclose(fp);
			return 1;
		}
	}
	fclose(fp);
	return 0;
}
void sccy_bill(char name[20]){//删除成员时先把对应账单信息删除 
	FILE *fp;
	char date1[20],name1[20];
	double sr1,zc1;
	bill *head,*p,*p1;
	head=(bill *)malloc(sizeof(bill));
	head->next=NULL;
	fp=fopen("bill.txt","r");
	int n=tjbill();
	p=head;
	for(int i=1;i<=n;i++)
    {
    	//printf("1");
		fscanf(fp,"%s %s %lf %lf",date1,name1,&sr1,&zc1);
       	if(strcmp(name,name1)==0){
       		continue;
       	}
		p1=(bill*)malloc(sizeof(bill));
			strcpy(p1->date,date1);
	        strcpy(p1->name,name1);
	       	p1->sr=sr1;
	       	p1->zc=zc1;
		p1->next=p->next;
		p->next=p1;
		p=p1;
	}
	fp=fopen("bill.txt","w");//清空文件,只写打开,然后关闭
	fclose(fp);
    fp=fopen("bill.txt","a");//追加文件
    p=head->next;
    while(p!=NULL)//把链表内容覆盖到文件
   	{
   		fprintf(fp,"%s %s %lf %lfn",p->date,p->name,p->sr,p->zc);
   	   	p1=p; 
		p=p->next;
		free(p1);
	}
    fclose(fp);
    //system ("cls");
    //printf("删除成功!"); 
} 
void sccy_user(char name[20]){//在用户文件里删除成员 
	FILE *fp;
	char name1[20],password1[20];
	int num1,qx1;
	user *head,*p,*p1;
	head=(user *)malloc(sizeof(user));
	head->next=NULL;
	fp=fopen("user.txt","r");
	int n=tjuser();
	p=head;
	for(int i=1,j=1;i<=n;i++,j++)
    {
    	//printf("1");
		fscanf(fp,"%d%s%s%d",&num1,name1,password1,&qx1);
       	if(strcmp(name,name1)==0){
       		j--;
       		continue;
       	}
		p1=(user*)malloc(sizeof(user));
			p1->num=j;
			strcpy(p1->name,name1);
	        strcpy(p1->password,password1);
	       	p1->qx=qx1;
		p1->next=p->next;
		p->next=p1;
		p=p1;
	}
	fp=fopen("user.txt","w");//清空文件,只写打开,然后关闭
	fclose(fp);
    fp=fopen("user.txt","a");//追加文件
    p=head->next;
    while(p!=NULL)//把链表内容覆盖到文件
   	{
   		fprintf(fp,"%d %s %s %dn",p->num,p->name,p->password,p->qx);
   	   	p1=p; 
		p=p->next;
		free(p1);
	}
    fclose(fp);
    //system ("cls");
    printf("删除成功!"); 
}
void sccy(){//删除成员(若成员不在系统中会提示)
	system("cls"); 
	char date[20],name[20];
	double sr,zc;
	printf("请输入删除的成员信息:n");
	printf("请输入用户名:");
	scanf("%s",name);
	printf("确认删除请按回车");
	
	
	char i=getch();
	int flag=sccy_match(name);
	if(flag){
		if(i==13){
			printf("n请再次确认,(信息删除不能恢复)n" );
			i=getch();
			if(i==13){
				sccy_bill(name);
				sccy_user(name);
			}
		}
		printf("n按任意键返回...");
		getch();
		usermenu1();
	}
	else{
		printf("n用户不存在...n");
		
		printf("按任意键返...");
		getch();
		usermenu1();
	}
}

void menu(){//总界面
	system("cls");
	printf("nnt    家庭财务管理系统nn");
	printf("**********************************************");
	printf("nntt1.登录系统n");
	printf("nntt2.退出系统n");
	printf("nnt    请按键选择,回车确定n");
	printf("**********************************************");
	int  i;scanf("%d",&i);
	if(i==1) land();
	if(i==2) return ;
}
void usermenu1(){//管理员界面 
	system("cls");
	printf("nnt       管理员nn");
	printf("**********************************************");
	printf("nt1.增加成员n");
	printf("nt2.增加账单信息n");
	printf("nt3.查看成员信息n");
	printf("nt4.查询所有成员收支信息n");
	printf("nt5.查询规定日期内个人收支信息n");
	printf("nt6.修改成员姓名、密码、权限n");
	printf("nt7.修改账单信息n");
	printf("nt8.删除账单信息n");
	printf("nt9.删除成员n");
	printf("nt10.注销n");
	printf("nt请按键选择,回车确定n");
	printf("**********************************************");
	int  i;
	scanf("%d",&i);
	if(i==1) zjcy();
	if(i==2) zjzd();
	if(i==3) ckcy();
	if(i==4) cx_0_dba();
	if(i==5) cx_1_dba();
	if(i==6) xgcy();
	if(i==7) xgzd();
	if(i==8) sczd();
	if(i==9) sccy();
	if(i==10) menu();
	return; 
}
void usermenu2(){//普通成员界面 3
	system("cls");
	printf("nnt       普通成员nn");
	printf("**********************************************");
	printf("nt1.查询所有成员收支信息n");
	printf("nt2.查询规定日期内个人收支信息n");
	printf("nt3.修改密码n");
	printf("nt4.添加账单n");
	printf("nt5.注销n");
	printf("nt请按键选择,回车确定n");
	printf("**********************************************");
	int  i;scanf("%d",&i);
	if(i==1) cx_0_or();
	if(i==2) cx_1_or();
	else if(i==3) xgmm_or();
	else if(i==4) zjzd_or(); 
	else if(i==5) menu();
	else menu();
	return; 
}

int main()
{	
	//cx_0_dba();
	//cx_0_or(); 
	//cx_1_dba();
	//cx_1_or();
	//zjcy();
	//xgcy();
	//xgmm();
	//xgzd();
	//sczd();
	//sccy();
	menu(); 
	return 0;
}
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/676116.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号