#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;
}