财务管理系统

包括
1.录入班级成员信息
2.排序
3.修改学生信息
4.删除指定学号学生
5.查找学生
6.添加财务信息
7.查询详细表
8.显示所有学生信息
9.退出
详细事项:本系统包括管理员登录和普通同学登录,两种登录方式的权限不一样,例如:同学登录只能修改自己学号的信息。初次使用(本地文件为空)需要初始化系统。每次使用完一个功能,会自动返回主函数。使用时需要注意本地文件是否齐全,包括:student.txt(储存学生信息),account.txt(储存财务信息),zh1.txt(储存账户信息),zh2.txt(储存账户信息),file2.txt(储存密码信息),file1.txt(储存密码信息)。本代码使用链表和文件系系统。本代码只是抱砖引玉。

/*首次使用,进行系统初始化 */ 
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<stdbool.h>
#include<windows.h>
#include<conio.h>
char password[9];   //记录密码 
char password2[9];  //记录密码 
int log;   //登录状态函数 
int ac; 
struct student
{
	char num[15];   //学号 
	char name[20];  //姓名 
	char sex;       //性别 
	int age;       //年龄 
	int clas;      //班级 
	char mail[20];  //邮箱 
	char number[13]; //电话号码 
};
typedef struct node{    //定义一个结构体 
	struct student data; 
	struct node *next; 
}s;
void in(s *head);  //信息的读取 
void menu();        //菜单函数 
void add(s *head);           //录入函数 
void dele(s *head);          //删除函数 
void mod(s *head);           //修改函数 
void query(s *head);         //查询函数 
void sort(s *head);          //排序函数 
void account();             //财务收入 
void print() ;              //显示总财务 
void printall();            //显示所有学生信息 
void out(s *head);  //信息的存储 
void in(s *head)
{
    FILE *fp;
    s *p;
    fp = fopen("student.txt","r");
    while (!feof(fp))
    {   
        p= (s*)malloc(sizeof(s));
        fscanf(fp,"%s\t%s\t%c\t%d\t%d\t%s\t%s\n",p->data.num,p->data.name,&p->data.sex,&p->data.age,&p->data.clas,p->data.mail,p->data.number);
        p->next=NULL;
		s *last=head->next;
		if(last!=NULL){          //当链表不为空时 ,才可以让last=head 
		   while(last->next){    //当last不为空时 ,当while结束时,这个last指向的就是最后一个结点 
		   	last=last->next;
		   }
		   last->next=p; 
		}else{
			head->next=p;  //链表为空 
		}
    }
    fclose(fp);
} 

void out(s *head)
{
	s *p;
	FILE *fp;
	if((fp=fopen("student.txt","w"))==NULL){
		printf("File open error!\n");
		exit(0);
	}
	for(p=head->next;p;p=p->next)    //把学生信息存进文件中 
	   fprintf(fp,"%s\t%s\t%c\t%d\t%d\t%s\t%s\n",p->data.num,p->data.name,p->data.sex,p->data.age,p->data.clas,p->data.mail,p->data.number);
	fclose(fp);
}
void menu()
{    
	char ch[6],*m,ch2;
	system("cls");   /*实现清屏操作,即清除之前输入的东西*/
	s *head=(s*)malloc(sizeof(s));
	head->next=NULL; 
	int i;
	if(log==1)
	{
	printf("1.录入班级成员信息\n");
	printf("2.排序\n");
	printf("3.修改学生信息\n"); 
	printf("4.删除指定学号学生\n");
  	printf("5.查找学生\n"); 
	printf("6.添加财务信息\n");
	printf("7.查询详细表\n"); 
	printf("8.显示所有学生信息\n");
	printf("9.退出\n"); 
	for(i=1;i<=50;i++)   //分割线 
		printf("-");
	printf("\n请选择(可多选):");
	scanf("%s",ch);
	m=ch;
	for(;*m!='\0';m++) //用数组指针实现多函数操作 
	{   
		switch(*m){
		case '1':system("cls");add(head);break;
	    case '2':system("cls");sort(head);break;
	    case '3':system("cls");mod(head);break;
        case '4':system("cls");dele(head);break;
	    case '5':system("cls");query(head);break;
	    case '6': account();break; 
	    case '7': print();break;
	    case '8':printall();break; 
        case '9':exit(0);
	  }
	}
    system("cls");
	} 
	if(log==2)
	{
	printf("因为权限问题,您只能使用一下功能\n");
	printf("3.修改学生信息\n"); 
	printf("4.查询信息\n");
	printf("6.添加财务信息\n");
	printf("7.查询详细表\n"); 
	printf("8.显示所有学生信息\n");
	printf("9.退出\n"); 
	for(i=1;i<=50;i++)   //分割线 
		printf("-");
	printf("\n请选择(可多选):");
	scanf("%s",ch);
	m=ch;
	for(;*m!='\0';m++) //用数组指针实现多函数操作 
	{   
		switch(*m){
	    case '3':system("cls");mod(head);break;
        case '4':system("cls");dele(head);break;
        case '6': account();break; 
	    case '7': print();break;
	    case '8':printall();break; 
        case '9':return;
	  }
	}
    system("cls");
	}
}
void add(s *head)
{    //录入函数 
	FILE *fp; 
    int i,temp=0,sum;      //temp用来标记邮箱 sum用来标记电话号码的位数 
	int x;
	system("cls");
	s *p;
	do{
		p=(s*)malloc(sizeof(s));    //申请一个内存;
		printf("请输入学号:\n");    
		scanf("%s",p->data.num);    //获取学号 
		s *q;
		q=head->next;               //指针指向下一个 
		while(q!=NULL){    //p已经指向尾部了,所以要定义一个别的指针来做for循环遍历 
			if(strcmp(p->data.num,q->data.num)==0){
				getchar();
				printf("学号重复,请重新输入:\n");
				scanf("%s",p->data.num); 
			}
			q=q->next;
		}
		getchar();
		printf("\n请输入姓名:\n");
		scanf("%s",p->data.name);
		getchar();
		printf("\n请输入性别(男生填m,女生填w):\n");
		scanf("%c",&p->data.sex);
		while(1){
			if((p->data.sex=='w')||(p->data.sex=='m'))  
			    break;
		    else{
		    getchar();   //要在每一项输入之后,读入任意一个字符才能下一步操作 
			printf("性别符号输入错误,请重新输入:\n");  //防止出入其他符号
			scanf("%c",&p->data.sex);
		  }
		}
		getchar();
		printf("\n请输入年龄:\n");
		scanf("%d",&p->data.age);
		getchar();
		printf("\n请填入班级,仅数字:\n");
		scanf("%d",&p->data.clas);
		getchar();
		printf("\n请输入邮箱(必须有@):\n");
		scanf("%s",p->data.mail); 
		while(1){
			for(i=0;p->data.mail[i]!='\0';i++){
			if(p->data.mail[i]=='@'){
				temp=1;
			}
		  }
		    if(temp==0){
			printf("邮箱中不包含@,请重新输入:\n");
			scanf("%s",p->data.mail);
		   }else break;
		}
		getchar();
		printf("\n请输入电话号码,必须是11位:\n");
		scanf("%s",p->data.number);
		while(1){
			sum=0;
			for(i=0;p->data.number[i]!='\0';i++){
			  sum+=1;
		   }
		    if(sum!=11){
		      getchar();
			  printf("号码位数超过11位或者少于11位,请重新输入:\n");
			  scanf("%s",p->data.number);
		   }else break;
		}
		p->next=NULL;
		s *last=head->next;
		if(last!=NULL){          //当链表不为空时 ,才可以让last=head 
		   while(last->next){    //当last不为空时 ,当while结束时,这个last指向的就是最后一个结点 
		   	last=last->next;
		   }
		   last->next=p; 
		}else{
			head->next=p;  //链表为空 
		}
		getchar();
	    printf("\n是否还要继续录入,是请输入1,否请输入0\n");
		scanf("%d",&x);
         if(x==0) break;
		 if(x==1) 
		system("cls");    //清空屏幕 
	}while(1);
	if((fp=fopen("student.txt","a"))==NULL){
		printf("File open error!\n");
		exit(0);
	}
	for(p=head->next;p;p=p->next)    //把学生信息存进文件中 
	   fprintf(fp,"%s\t%s\t%c\t%d\t%d\t%s\t%s\n",p->data.num,p->data.name,p->data.sex,p->data.age,p->data.clas,p->data.mail,p->data.number);
	fclose(fp);
	printf("\n信息已经存入文件\n");
	system("pause");
	s *k;
	p=head->next;
	while(p!=NULL){    //清空链表,只剩head,方便之后的操作 
		k=p->next;
		free(p);
		p=k;
	}
	head->next=NULL;
	if(x==0)
	menu();
	
}
void dele(s *head)
{   //删除函数 
	int temp=0,i,flag2;
	in(head);   //信息的读取 
	s *p,*q; 
    char numb[15];
    FILE *fpw=fopen("tmp.txt","w");
	char ch1;
	ch1='-';
	system("cls");
	printf("请输入学号:");
	scanf("%s",numb);
	for(q=head,p=head->next;p;q=p,p=p->next){ //遍历链表,条件是p存在 
		if(strcmp(numb,p->data.num)==0){
			temp=1;
			system("cls");
			printf("学生信息如下:"); 
			printf("学号:%s\n",p->data.num);
			printf("姓名:%s\n",p->data.name);
			printf("性别:%c\n",p->data.sex);
			printf("年龄:%d\n",p->data.age);
			printf("班级:%d\n",p->data.clas);
			printf("邮箱:%s\n",p->data.mail);
			printf("电话号码:%s\n",p->data.number);
			for(i=1;i<=50;i++){    //分割线 
				printf("%c",ch1);
			}
			printf("\n");
			printf("是否要删除此学生信息?(1或2)\n");
			scanf("%d",&flag2);
			if(flag2==2)
			{
			   printf("取消删除,三秒后返回主菜单"); 
			   Sleep(3000); 
			   menu();
			}
			if(flag2==1){
				if(q){
					q->next=p->next;   //将前一个指针指向要删除的后一个结点 
					out(head);
				} 
				else{
					head->next=p->next;
					out(head);
				}
				free(p);
				printf("信息已删除");
			    printf("三秒后返回主菜单"); 
				Sleep(3000);
				menu(); 
			}
		}
	}
	if(temp==1){   //如果temp等于一说明信息已经删除,把改过后的链表重新写入文件中 
		out(head);
	} 
	if(temp==0){    //没有找到学生的信息 
		for(i=1;i<=50;i++)
		  printf("%c",ch1);
		printf("\n没有找到此学生信息,按任意键退出\n"); 
		printf("三秒后返回主菜单"); 
		Sleep(3000);
		menu();
	}
	s *k;
	p=head->next;
	while(p!=NULL){    //清空链表,只剩head,方便之后的操作 
		k=p->next;
		free(p);
		p=k;
	}
	head->next=NULL;
}
void mod(s *head)
{   //修改函数 
    int nums;
	FILE *fp;
	system("cls");    //清空屏幕
	s *p,*q;   //作为链表中的指针 
	in(head); 
	char *m;   //用来控制修改的信息编号 
	int temp=0;
	int i,sui,ban,j=1;//代表修改的年龄班级 
	char num1[15];
	char ch[8];
	char xuehao[15],ming[20],xingbie,youxiang[20],haoma[20];//代表要修改的信息名  
	printf("请输入要修改的学生的学号:\n");
	getchar();
	scanf("%s",num1);
    nums= atoi(num1);
//	 printf("%d",nums); 
     if(log==2)
	 {
	  if(nums != ac)
     {
		 while(j)
		 {
     	     printf("您只能修改自己的信息,请输入正确信息");  	     
		 	 scanf("%s",num1);
		 	nums= atoi(num1);
		 	 if(ac==nums)
		 	 {
		 	 	j=0;
			  }
		 }
		
	 }
	  } 
	
	for(p=head->next;p;p=p->next){   //遍历列表,寻找与输入相同的学号 
		if(strcmp(num1,p->data.num)==0){
			temp=1;     //找到信息后的标记 
			printf("1.学号:%s\n",p->data.num);     //找到后显示出完整信息 
			printf("2.姓名:%s\n",p->data.name);
			printf("3.年龄:%d\n",p->data.age);
			printf("4.班级:%d\n",p->data.clas);
			printf("5.邮箱:%s\n",p->data.mail);
			printf("6.电话号码:%s\n",p->data.number);
			printf("0.退出\n");
			for(i=1;i<=50;i++){  //分割线 
				printf("-");
			}
			printf("\n");
			printf("请输入要修改信息的相应序号(可多选):\n");
			scanf("%s",ch);
			getchar();
			m=ch;
			for(;*m!='\0';m++){    //用循环来解决修改多个学生信息的问题 
			switch(*m){
				case '1':printf("请输入要修改学号的内容:\n"); 
				         scanf("%s",xuehao);
						 strcpy(p->data.num,xuehao);break;
				case '2':printf("\n请输入要修改姓名的内容:\n");
				         scanf("%s",ming);
				         strcpy(p->data.name,ming);break;
				case '3':printf("\n请输入要修改年龄的内容:\n");
				         scanf("%d",&sui);
				         p->data.age=sui;break;
				case '4':printf("\n请输入要修改班级的内容:\n");
				         scanf("%d",&ban);
				         p->data.clas=ban;break;
				case '5':printf("\n请输入要修改邮箱的内容:\n");
				         scanf("%s",youxiang);
				         strcpy(p->data.mail,youxiang);break;
				case '6':printf("\n请输入要修改电话号码的内容:\n");
				         scanf("%s",haoma);
				         strcpy(p->data.number,haoma);break;
				case '0':break;
			} 
		}
	    getchar();
	    printf("修改后的信息如下:\n"); 
	    printf("%s\t%s\t%c\t%d\t%d\t%s\t%s\n",p->data.num,p->data.name,p->data.sex,p->data.age,p->data.clas,p->data.mail,p->data.number);//输出修改后的信息 
   	    system("pause");//防止闪屏 
	  } 
	}
	if(temp==1){   //如果temp等于一说明信息已经删除,把改过后的链表重新写入文件中 
		out(head);
	}
	
    if(temp==0){   //没找到学生信息 
    	printf("没有此学生的信息\n");
    	system("pause");
	}
	s *k;
	p=head->next;
	while(p!=NULL){    //清空链表,只剩head,方便之后的操作 
		k=p->next;
		free(p);
		p=k;
	}
	head->next=NULL; 
	printf("三秒后返回主菜单");
	Sleep(3000); 
	menu();
}
void query(s *head)
{   //查询函数 
	s *p;    //p用来遍历查找的内容 
	in(head); 
	p=head->next;
	system("cls");
	int i,sui,ban,temp=0;   //temp用来标记是否找到信息 
	char ch;
	char xuehao[15],ming[20],xingbie,youxiang[20],haoma[20];  //用来输入查找的信息  
	printf("1.学号\n"); 
	printf("2.姓名\n"); 
	printf("3.年龄\n"); 
	printf("4.班级\n"); 
	printf("5.邮箱\n"); 
	printf("6.电话号码\n"); 
	printf("7.显示所有学生的信息\n"); 
	printf("0.退出\n"); 
	for(i=1;i<=50;i++){
		printf("-");     //分割线 
	} 
	printf("\n");
	printf("请选择输入要查询的信息编号:\n");
	getchar();
	ch=getchar();
	if(ch=='1'){
		getchar(); 
		printf("请输入要查找的信息内容:\n");
				 scanf("%s",xuehao);
				 temp=1;
				 while(p){
				 	if(strcmp(xuehao,p->data.num)==0){   //找到的话输出 
				 	  printf("%s\t%s\t%c\t%d\t%d\t%s\t%s\n",p->data.num,p->data.name,p->data.sex,p->data.age,p->data.clas,p->data.mail,p->data.number);
				 	 system("pause");
				 	} 
					 p=p->next;
				 }
	}
	 if(ch=='2'){
		getchar(); 
		printf("请输入要查找的信息内容:\n");
				 scanf("%s",ming);
				 temp=1;
				 while(p){
				 	if(strcmp(ming,p->data.name)==0){  
				 	  printf("%s\t%s\t%c\t%d\t%d\t%s\t%s\n",p->data.num,p->data.name,p->data.sex,p->data.age,p->data.clas,p->data.mail,p->data.number);
				 	  system("pause");
					 } 
					 p=p->next;
				 }
	}
	 if(ch=='3'){
		getchar(); 
		printf("请输入要查找的信息内容:\n");
				 scanf("%c",&xingbie);
				 temp=1;
				 while(p){
				 	if(xingbie==p->data.sex){
				 		printf("%s\t%s\t%c\t%d\t%d\t%s\t%s\n",p->data.num,p->data.name,p->data.sex,p->data.age,p->data.clas,p->data.mail,p->data.number);
				 	   system("pause");
					 }
				 	  p=p->next;
				 }
	}
	 if(ch=='4'){
		getchar(); 
		printf("请输入要查找的信息内容:\n");
				 scanf("%d",&sui);
				 temp=1;
				 while(p){
				 	if(sui==p->data.age){ 
				 	  printf("%s\t%s\t%c\t%d\t%d\t%s\t%s\n",p->data.num,p->data.name,p->data.sex,p->data.age,p->data.clas,p->data.mail,p->data.number);
				 	system("pause");
				 	} 
					p=p->next;
				 }
	}
	 if(ch=='5'){
		getchar(); 
		printf("请输入要查找的信息内容:\n");
				 scanf("%d",&ban);
				 temp=1;
				while(p){
				 	if(ban==p->data.clas){ 
				 	  printf("%s\t%s\t%c\t%d\t%d\t%s\t%s\n",p->data.num,p->data.name,p->data.sex,p->data.age,p->data.clas,p->data.mail,p->data.number);
				 	system("pause");
				 	} 
					 p=p->next;
				 }
	}
	 if(ch=='6'){
		getchar(); 
		printf("请输入要查找的信息内容:\n");
				 scanf("%s",youxiang);
				 temp=1;
				 while(p){
				 	if(strcmp(youxiang,p->data.name)==0){ 
				 	  printf("%s\t%s\t%c\t%d\t%d\t%s\t%s\n",p->data.num,p->data.name,p->data.sex,p->data.age,p->data.clas,p->data.mail,p->data.number);
				      system("pause");
				    } 
					p=p->next;
				 }
	}
	 if(ch=='7'){
		getchar(); 
		printf("请输入要修查找的信息内容:\n");
				 scanf("%s",haoma);
				 temp=1;
				 while(p){
				 	if(strcmp(haoma,p->data.name)==0){ 
				 	  printf("%s\t%s\t%c\t%d\t%d\t%s\t%s\n",p->data.num,p->data.name,p->data.sex,p->data.age,p->data.clas,p->data.mail,p->data.number);
				 	system("pause");
					 } 
					 p=p->next;
				 }
	}
	 if(ch=='8'){
		getchar(); 
		temp=1;
		        while(p){
				 	printf("%s\t%s\t%c\t%d\t%d\t%s\t%s\n",p->data.num,p->data.name,p->data.sex,p->data.age,p->data.clas,p->data.mail,p->data.number);
				 	system("pause");
					p=p->next;
				 }
	}
	if(temp==0)
	{
		printf("没有找到此学生的信息\n");
		printf("三秒后返回主菜单"); 
		Sleep(3000);
		menu();
	}
	s *k;
	p=head->next;
	while(p!=NULL){    //清空链表,只剩head,方便之后的操作 
		k=p->next;
		free(p);
		p=k;
	}
	head->next=NULL; 
	printf("查询完毕\n");
	printf("三秒后返回主菜单"); 
	Sleep(3000);
	menu();
}
void sort(s *head)
{    //排序函数 

	system("cls");     //清空屏幕
	s *p,*q;
	in(head);
	q=head;
	p=head->next;
	s *w;
	w=head->next;
	char ch;
	printf("请输入要排序的内容(1是学号、2是年龄):\n");
	getchar();
	scanf("%c", &ch);
	if (ch == '1'){
		s *temp = (s*)malloc(sizeof(s));
		while (p != NULL)
		{
			while (p->next != NULL)     //按照学号大小排序 
			{
				if (strcmp(p->data.num, p->next->data.num)<0)
				{
					temp->data = p->data;
					p->data = p->next->data;
					p->next->data = temp->data;
				}
				p = p->next;
			}
			p = q->next;
			q = p;
		}
	}
	else{
		s *temp = (s*)malloc(sizeof(s));
		while (p != NULL)
		{
			while (p->next != NULL)    //按照年龄大小排序 
			{
				if (p->data.age < p->next->data.age)
				{
					temp->data = p->data;
					p->data = p->next->data;
					p->next->data = temp->data;
				}
				p = p->next;
			}
			p = q->next;
			q = p;
		}
	}
	printf("\n排序后的信息如下:\n");
	while (w != NULL){      //将排序后的链表输出 
		printf("%s\t%s\t%c\t%d\t%d\t%s\t%s\n",w->data.num,w->data.name,w->data.sex,w->data.age,w->data.clas,w->data.mail,w->data.number);
		w = w->next;
	}system("pause");
	out(head);
	s *k;
	p=head->next;
	while(p!=NULL){    //清空链表,只剩head,方便之后的操作 
		k=p->next;
		free(p);
		p=k;
	}
	head->next=NULL; 
	printf("三秒后返回主菜单"); 
	Sleep(3000);
	menu();
}
void account()
{    
	int n;
	char date[25];
	char item[40];
	char s1[45]; 
	char count[12];
	FILE *fp;
	
	if((fp=fopen("account.txt","at"))==NULL)
	{
		printf("Cannot open file strike any key exit!");
		getch();
		exit(1);
	}
	printf("请输入次数");
	scanf("%d",&n); 
	while(n)
	{
		printf("请输入姓名\n"); 
		scanf("%s",&s1);
		fputs(s1,fp);
		printf("请输入日期\n"); 
		scanf("%s",&date);
		fputs(date,fp);
		printf("请输入名称\n"); 
		scanf("%s",&item);
		fputs(item,fp);
		printf("请输入金额");
		scanf("%s",&count);
			fputs(count,fp);
		n--;
	}
    fclose(fp);
	printf("三秒后返回主菜单"); 
	Sleep(3000);
	menu();
}
void print()
{   //打印所有财务数据 
	char str[10000];
	FILE *fp;
	int qq;
	if((fp=fopen("account.txt","rt"))==NULL)
	{
		printf("Cannot open file strike any key exit!");
		getch();
		exit(1);
	}
	  fgets(str,1000,fp);    //获取文件内容 
      printf("%s",str);     //打印内容 
	            
	printf("\n");
    printf("1返回主菜单");fclose(fp); //关闭文件
    scanf("%d",&qq);
    if(qq==1)
    {
    	menu();
	}
	 
     
 } 
void printall()
{    //打印所有是学生信息函数 
	char str[1000];
	FILE *fp;
	int qq;
	if((fp=fopen("student.txt","rt"))==NULL)
	{
		printf("Cannot open file strike any key exit!");
		getch();          
		exit(1);     //找不到文件退出程序 
	}
	   while((fgets(str,1024,fp))!=NULL)

             {
                   printf(str);
             }     //打印内容 
	   fclose(fp);                  //关闭文件 
		printf("1返回主菜单");
		scanf("%d",&qq);
		if(qq==1)
		{
		menu();
       }
}
void first()
{    //读取文件 
	FILE *fp,*fp1;    /*定义文件指针*/
	char s[9],s1[9],s2[9],s3[9],ch,n;
	int i;
	ch='_';
	if((fp=fopen("file.txt","r"))==NULL) 
	{
		printf("\n 请进行初始化操作!\n");
		for(i=1;i<=50;i++)/*用来做分割线*/ 
		   printf("%c",ch);
		getch();   /*是输入一个字符,但不显示在屏幕上*/
		do{
			printf("\n 设置密码,不得超过八位数 \n");
			for(i=0;i<8&&((s[i]=getch())!=13);i++)    /*13代表的是回车*/
			    putch('*'); /*显示字符*/
			printf("\n 再确认一次密码 \n");
			for(i=0;i<8&&((s1[i]=getch())!=13);i++)    
			    putch('*');
			s[i]='\0'; 
			s1[i]='\0';
			if(strcmp(s,s1)!=0)   /*判断两次密码输入是否一致*/ 
			  printf("\n 两次密码输入不一致,请重新输入 \n");
			else break;
		} while(1);   /*当括号里是1时表示无限循环*/
		 if((fp1=fopen("file.txt","w"))==NULL){
		 	printf("\n 系统创建失败,请按任意键退出 \n");  /*打开文件,把密码存进去*/ 
		 	getch();
		 	exit(1);
		 }
		for(i=0;s[i]!='\0';i++)
		    putw(s[i],fp1);     /*将数组元素(即密码)放入文件中*/
		fclose(fp1);            /*关闭文件*/ 
		printf("\n 系统初始化成功,按任意键退出后,再重新进入 \n");
		getch();
		exit(1);	  
	}
	else{    
	    i=0;
		while(!feof(fp)&&i<8)
		    s2[i++]=getw(fp);  /*从文件读出字符赋给数组*/ 
		s2[i]='\0'; 
		strcpy(password,s2);   /*将数组s2的字符复制给password*/
//	    enroll();    
	}
	if((fp=fopen("file2.txt","r"))==NULL) 
	{
		printf("\n 请进行初始化操作!\n");
		for(i=1;i<=50;i++)/*用来做分割线*/ 
		   printf("%c",ch);
		getch();   /*是输入一个字符,但不显示在屏幕上*/
		do{
			printf("\n 设置密码,不得超过八位数 \n");
			for(i=0;i<8&&((s[i]=getch())!=13);i++)    /*13代表的是回车*/
			    putch('*'); /*显示字符*/
			printf("\n 再确认一次密码 \n");
			for(i=0;i<8&&((s1[i]=getch())!=13);i++)    
			    putch('*');
			s[i]='\0'; 
			s1[i]='\0';
			if(strcmp(s,s1)!=0)   /*判断两次密码输入是否一致*/ 
			  printf("\n 两次密码输入不一致,请重新输入 \n");
			else break;
		} while(1);   /*当括号里是1时表示无限循环*/
		 if((fp1=fopen("file2.txt","w"))==NULL){
		 	printf("\n 系统创建失败,请按任意键退出 \n");  /*打开文件,把密码存进去*/ 
		 	getch();
		 	exit(1);
		 }
		for(i=0;s[i]!='\0';i++)
		    putw(s[i],fp1);     /*将数组元素(即密码)放入文件中*/
		fclose(fp1);            /*关闭文件*/ 
		printf("\n 系统初始化成功,按任意键退出后,再重新进入 \n");
		getch();
		exit(1);	  
	}
	else{    
	    i=0;
		while(!feof(fp)&&i<8)
		    s3[i++]=getw(fp);  /*从文件读出字符赋给数组*/ 
		s2[i]='\0'; 
		strcpy(password2,s3);   /*将数组s2的字符复制给password*/
	     
	}
//	 enroll();  
}
void enroll()
{     //登录函数
    int flag=0;
	int i,n=5;
	char str[9];
	printf("\n"); 
	printf("\n"); 
	printf("\n"); 
	printf("\n"); 
	printf("\n"); 
	printf("\n"); 
	printf("              ----------------------------------------------------------------               \n"); 
	printf("              |               欢迎使用财务管理系统                            |              \n"); 
	printf("              |                                                               |              \n");
	printf("              |              请选择登录方式:1管理员登录       2班级成员登录  |              \n");
	printf("              ----------------------------------------------------------------               \n"); 
	if(getch()=='1') 
	{
		log=1;
	}else
	{
		log=2;
	}
    switch(log)
    {
    	case 1:  	
    	            printf("请输入账号\n");
    	            scanf("%d",&ac);
		            while(n)
    	            {
			            printf("\n");
				        printf("请输入密码"); 
						for(i=0;i<8&&((str[i]=getch())!=13);i++)
						  putch(str[i]);          //获取键盘输入的内容 
						str[i]='\0';
						for(int j=0;j<i;j++)
						{
						if(str[j]!=password[j])
						{
					    	flag=1;           //判断输入的密码和本地文件内的密码是否相同 
						}
						else{
						flag=0;
						} 
					    } 
                        if(flag)
                        {
                        	printf("输入错误密码");
                        	n--;              //密码错误可用次数减一 
						}
					    if(flag==0)
					    {
					    	break;             //密码正确退出循环 
						}
   					}
   					if(n=0 )
					{
						printf("你输入五次错误密码,请退出");  
						getch();
						exit(1);  /*非正常运行导致退出程序*/ 
					} 
		            break;
    	case 2:   
    	            printf("请输入账号\n");
    	            scanf("%d",&ac);
		            while(n)
		            {
			            printf("\n");
				        printf("请输入密码"); 
						for(i=0;i<8&&((str[i]=getch())!=13);i++)
						  putch(str[i]);                 //获取键盘输入的内容 
						str[i]='\0';
						for(int j=0;j<i;j++)
						{
						if(str[j]!=password2[j])
						{
							flag=1;            //判断输入的密码和本地文件内的密码是否相同 
						}
						else{
							flag=0;
						} 
						}
						if(flag)
                        {
                        	printf("你输入错误密码");
                        	n--;                 //密码错误可用次数减一 
						}
						if(flag==0)
					    {
					    	break;             //密码正确退出循环 
						} 
					}
					if(n=0)
					{
						printf("你输入五次错误密码,请退出");
						getch();
						exit(1);  /*非正常运行导致退出程序*/ 
					}
				
		            break;
			
		default:    printf("您输入了无效数字");
		            break; 
    		       
	}

}
int main()
{
	first();          //启动初始化函数 
	enroll();         //启动登录函数 
	 menu();          //启动菜单函数 
}