溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

C語言如何實(shí)現(xiàn)財(cái)務(wù)管理系統(tǒng)

發(fā)布時(shí)間:2021-11-22 12:26:59 來源:億速云 閱讀:210 作者:小新 欄目:開發(fā)技術(shù)

這篇文章將為大家詳細(xì)講解有關(guān)C語言如何實(shí)現(xiàn)財(cái)務(wù)管理系統(tǒng),小編覺得挺實(shí)用的,因此分享給大家做個(gè)參考,希望大家閱讀完這篇文章后可以有所收獲。

具體內(nèi)容如下

包括

1.錄入班級(jí)成員信息
2.排序
3.修改學(xué)生信息
4.刪除指定學(xué)號(hào)學(xué)生
5.查找學(xué)生
6.添加財(cái)務(wù)信息
7.查詢?cè)敿?xì)表
8.顯示所有學(xué)生信息
9.退出

詳細(xì)事項(xiàng):本系統(tǒng)包括管理員登錄和普通同學(xué)登錄,兩種登錄方式的權(quán)限不一樣,例如:同學(xué)登錄只能修改自己學(xué)號(hào)的信息。初次使用(本地文件為空)需要初始化系統(tǒng)。每次使用完一個(gè)功能,會(huì)自動(dòng)返回主函數(shù)。使用時(shí)需要注意本地文件是否齊全,包括:student.txt(儲(chǔ)存學(xué)生信息),account.txt(儲(chǔ)存財(cái)務(wù)信息),zh2.txt(儲(chǔ)存賬戶信息),zh3.txt(儲(chǔ)存賬戶信息),file2.txt(儲(chǔ)存密碼信息),file1.txt(儲(chǔ)存密碼信息)。本代碼使用鏈表和文件系系統(tǒng)。本代碼只是抱磚引玉。

/*首次使用,進(jìn)行系統(tǒng)初始化 */ 
#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;   //登錄狀態(tài)函數(shù) 
int ac; 
struct student
{
 char num[15];   //學(xué)號(hào) 
 char name[20];  //姓名 
 char sex;       //性別 
 int age;       //年齡 
 int clas;      //班級(jí) 
 char mail[20];  //郵箱 
 char number[13]; //電話號(hào)碼 
};
typedef struct node{    //定義一個(gè)結(jié)構(gòu)體 
 struct student data; 
 struct node *next; 
}s;
void in(s *head);  //信息的讀取 
void menu();        //菜單函數(shù) 
void add(s *head);           //錄入函數(shù) 
void dele(s *head);          //刪除函數(shù) 
void mod(s *head);           //修改函數(shù) 
void query(s *head);         //查詢函數(shù) 
void sort(s *head);          //排序函數(shù) 
void account();             //財(cái)務(wù)收入 
void print() ;              //顯示總財(cái)務(wù) 
void printall();            //顯示所有學(xué)生信息 
void out(s *head);  //信息的存儲(chǔ) 
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){          //當(dāng)鏈表不為空時(shí) ,才可以讓last=head 
     while(last->next){    //當(dāng)last不為空時(shí) ,當(dāng)while結(jié)束時(shí),這個(gè)last指向的就是最后一個(gè)結(jié)點(diǎn) 
      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)    //把學(xué)生信息存進(jìn)文件中 
    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,ch3;
 system("cls");   /*實(shí)現(xiàn)清屏操作,即清除之前輸入的東西*/
 s *head=(s*)malloc(sizeof(s));
 head->next=NULL; 
 int i;
 if(log==1)
 {
 printf("1.錄入班級(jí)成員信息\n");
 printf("2.排序\n");
 printf("3.修改學(xué)生信息\n"); 
 printf("4.刪除指定學(xué)號(hào)學(xué)生\n");
   printf("5.查找學(xué)生\n"); 
 printf("6.添加財(cái)務(wù)信息\n");
 printf("7.查詢?cè)敿?xì)表\n"); 
 printf("8.顯示所有學(xué)生信息\n");
 printf("9.退出\n"); 
 for(i=1;i<=50;i++)   //分割線 
  printf("-");
 printf("\n請(qǐng)選擇(可多選):");
 scanf("%s",ch);
 m=ch;
 for(;*m!='\0';m++) //用數(shù)組指針實(shí)現(xiàn)多函數(shù)操作 
 {   
  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("因?yàn)闄?quán)限問題,您只能使用一下功能\n");
 printf("3.修改學(xué)生信息\n"); 
 printf("4.查詢信息\n");
 printf("6.添加財(cái)務(wù)信息\n");
 printf("7.查詢?cè)敿?xì)表\n"); 
 printf("8.顯示所有學(xué)生信息\n");
 printf("9.退出\n"); 
 for(i=1;i<=50;i++)   //分割線 
  printf("-");
 printf("\n請(qǐng)選擇(可多選):");
 scanf("%s",ch);
 m=ch;
 for(;*m!='\0';m++) //用數(shù)組指針實(shí)現(xiàn)多函數(shù)操作 
 {   
  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)
{    //錄入函數(shù) 
 FILE *fp; 
    int i,temp=0,sum;      //temp用來標(biāo)記郵箱 sum用來標(biāo)記電話號(hào)碼的位數(shù) 
 int x;
 system("cls");
 s *p;
 do{
  p=(s*)malloc(sizeof(s));    //申請(qǐng)一個(gè)內(nèi)存;
  printf("請(qǐng)輸入學(xué)號(hào):\n");    
  scanf("%s",p->data.num);    //獲取學(xué)號(hào) 
  s *q;
  q=head->next;               //指針指向下一個(gè) 
  while(q!=NULL){    //p已經(jīng)指向尾部了,所以要定義一個(gè)別的指針來做for循環(huán)遍歷 
   if(strcmp(p->data.num,q->data.num)==0){
    getchar();
    printf("學(xué)號(hào)重復(fù),請(qǐng)重新輸入:\n");
    scanf("%s",p->data.num); 
   }
   q=q->next;
  }
  getchar();
  printf("\n請(qǐng)輸入姓名:\n");
  scanf("%s",p->data.name);
  getchar();
  printf("\n請(qǐng)輸入性別(男生填m,女生填w):\n");
  scanf("%c",&p->data.sex);
  while(1){
   if((p->data.sex=='w')||(p->data.sex=='m'))  
       break;
      else{
      getchar();   //要在每一項(xiàng)輸入之后,讀入任意一個(gè)字符才能下一步操作 
   printf("性別符號(hào)輸入錯(cuò)誤,請(qǐng)重新輸入:\n");  //防止出入其他符號(hào)
   scanf("%c",&p->data.sex);
    }
  }
  getchar();
  printf("\n請(qǐng)輸入年齡:\n");
  scanf("%d",&p->data.age);
  getchar();
  printf("\n請(qǐng)?zhí)钊氚嗉?jí),僅數(shù)字:\n");
  scanf("%d",&p->data.clas);
  getchar();
  printf("\n請(qǐng)輸入郵箱(必須有@):\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("郵箱中不包含@,請(qǐng)重新輸入:\n");
   scanf("%s",p->data.mail);
     }else break;
  }
  getchar();
  printf("\n請(qǐng)輸入電話號(hào)碼,必須是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("號(hào)碼位數(shù)超過11位或者少于11位,請(qǐng)重新輸入:\n");
     scanf("%s",p->data.number);
     }else break;
  }
  p->next=NULL;
  s *last=head->next;
  if(last!=NULL){          //當(dāng)鏈表不為空時(shí) ,才可以讓last=head 
     while(last->next){    //當(dāng)last不為空時(shí) ,當(dāng)while結(jié)束時(shí),這個(gè)last指向的就是最后一個(gè)結(jié)點(diǎn) 
      last=last->next;
     }
     last->next=p; 
  }else{
   head->next=p;  //鏈表為空 
  }
  getchar();
     printf("\n是否還要繼續(xù)錄入,是請(qǐng)輸入1,否請(qǐng)輸入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)    //把學(xué)生信息存進(jìn)文件中 
    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信息已經(jīng)存入文件\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)
{   //刪除函數(shù) 
 int temp=0,i,flag2;
 in(head);   //信息的讀取 
 s *p,*q; 
    char numb[15];
    FILE *fpw=fopen("tmp.txt","w");
 char ch2;
 ch2='-';
 system("cls");
 printf("請(qǐng)輸入學(xué)號(hào):");
 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("學(xué)生信息如下:"); 
   printf("學(xué)號(hào):%s\n",p->data.num);
   printf("姓名:%s\n",p->data.name);
   printf("性別:%c\n",p->data.sex);
   printf("年齡:%d\n",p->data.age);
   printf("班級(jí):%d\n",p->data.clas);
   printf("郵箱:%s\n",p->data.mail);
   printf("電話號(hào)碼:%s\n",p->data.number);
   for(i=1;i<=50;i++){    //分割線 
    printf("%c",ch2);
   }
   printf("\n");
   printf("是否要?jiǎng)h除此學(xué)生信息?(1或2)\n");
   scanf("%d",&flag2);
   if(flag2==2)
   {
      printf("取消刪除,三秒后返回主菜單"); 
      Sleep(3000); 
      menu();
   }
   if(flag2==1){
    if(q){
     q->next=p->next;   //將前一個(gè)指針指向要?jiǎng)h除的后一個(gè)結(jié)點(diǎn) 
     out(head);
    } 
    else{
     head->next=p->next;
     out(head);
    }
    free(p);
    printf("信息已刪除");
       printf("三秒后返回主菜單"); 
    Sleep(3000);
    menu(); 
   }
  }
 }
 if(temp==1){   //如果temp等于一說明信息已經(jīng)刪除,把改過后的鏈表重新寫入文件中 
  out(head);
 } 
 if(temp==0){    //沒有找到學(xué)生的信息 
  for(i=1;i<=50;i++)
    printf("%c",ch2);
  printf("\n沒有找到此學(xué)生信息,按任意鍵退出\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)
{   //修改函數(shù) 
    int nums;
 FILE *fp;
 system("cls");    //清空屏幕
 s *p,*q;   //作為鏈表中的指針 
 in(head); 
 char *m;   //用來控制修改的信息編號(hào) 
 int temp=0;
 int i,sui,ban,j=1;//代表修改的年齡班級(jí) 
 char num1[15];
 char ch[8];
 char xuehao[15],ming[20],xingbie,youxiang[20],haoma[20];//代表要修改的信息名  
 printf("請(qǐng)輸入要修改的學(xué)生的學(xué)號(hào):\n");
 getchar();
 scanf("%s",num1);
    nums= atoi(num1);
//  printf("%d",nums); 
     if(log==2)
  {
   if(nums != ac)
     {
   while(j)
   {
           printf("您只能修改自己的信息,請(qǐng)輸入正確信息");        
     scanf("%s",num1);
    nums= atoi(num1);
     if(ac==nums)
     {
      j=0;
     }
   }
  
  }
   } 
 
 for(p=head->next;p;p=p->next){   //遍歷列表,尋找與輸入相同的學(xué)號(hào) 
  if(strcmp(num1,p->data.num)==0){
   temp=1;     //找到信息后的標(biāo)記 
   printf("1.學(xué)號(hào):%s\n",p->data.num);     //找到后顯示出完整信息 
   printf("2.姓名:%s\n",p->data.name);
   printf("3.年齡:%d\n",p->data.age);
   printf("4.班級(jí):%d\n",p->data.clas);
   printf("5.郵箱:%s\n",p->data.mail);
   printf("6.電話號(hào)碼:%s\n",p->data.number);
   printf("0.退出\n");
   for(i=1;i<=50;i++){  //分割線 
    printf("-");
   }
   printf("\n");
   printf("請(qǐng)輸入要修改信息的相應(yīng)序號(hào)(可多選):\n");
   scanf("%s",ch);
   getchar();
   m=ch;
   for(;*m!='\0';m++){    //用循環(huán)來解決修改多個(gè)學(xué)生信息的問題 
   switch(*m){
    case '1':printf("請(qǐng)輸入要修改學(xué)號(hào)的內(nèi)容:\n"); 
             scanf("%s",xuehao);
       strcpy(p->data.num,xuehao);break;
    case '2':printf("\n請(qǐng)輸入要修改姓名的內(nèi)容:\n");
             scanf("%s",ming);
             strcpy(p->data.name,ming);break;
    case '3':printf("\n請(qǐng)輸入要修改年齡的內(nèi)容:\n");
             scanf("%d",&sui);
             p->data.age=sui;break;
    case '4':printf("\n請(qǐng)輸入要修改班級(jí)的內(nèi)容:\n");
             scanf("%d",&ban);
             p->data.clas=ban;break;
    case '5':printf("\n請(qǐng)輸入要修改郵箱的內(nèi)容:\n");
             scanf("%s",youxiang);
             strcpy(p->data.mail,youxiang);break;
    case '6':printf("\n請(qǐng)輸入要修改電話號(hào)碼的內(nèi)容:\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等于一說明信息已經(jīng)刪除,把改過后的鏈表重新寫入文件中 
  out(head);
 }
 
    if(temp==0){   //沒找到學(xué)生信息 
     printf("沒有此學(xué)生的信息\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)
{   //查詢函數(shù) 
 s *p;    //p用來遍歷查找的內(nèi)容 
 in(head); 
 p=head->next;
 system("cls");
 int i,sui,ban,temp=0;   //temp用來標(biāo)記是否找到信息 
 char ch;
 char xuehao[15],ming[20],xingbie,youxiang[20],haoma[20];  //用來輸入查找的信息  
 printf("1.學(xué)號(hào)\n"); 
 printf("2.姓名\n"); 
 printf("3.年齡\n"); 
 printf("4.班級(jí)\n"); 
 printf("5.郵箱\n"); 
 printf("6.電話號(hào)碼\n"); 
 printf("7.顯示所有學(xué)生的信息\n"); 
 printf("0.退出\n"); 
 for(i=1;i<=50;i++){
  printf("-");     //分割線 
 } 
 printf("\n");
 printf("請(qǐng)選擇輸入要查詢的信息編號(hào):\n");
 getchar();
 ch=getchar();
 if(ch=='1'){
  getchar(); 
  printf("請(qǐng)輸入要查找的信息內(nèi)容:\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("請(qǐng)輸入要查找的信息內(nèi)容:\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("請(qǐng)輸入要查找的信息內(nèi)容:\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("請(qǐng)輸入要查找的信息內(nèi)容:\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("請(qǐng)輸入要查找的信息內(nèi)容:\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("請(qǐng)輸入要查找的信息內(nèi)容:\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("請(qǐng)輸入要修查找的信息內(nèi)容:\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("沒有找到此學(xué)生的信息\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)
{    //排序函數(shù)

 system("cls");     //清空屏幕
 s *p,*q;
 in(head);
 q=head;
 p=head->next;
 s *w;
 w=head->next;
 char ch;
 printf("請(qǐng)輸入要排序的內(nèi)容(1是學(xué)號(hào)、2是年齡):\n");
 getchar();
 scanf("%c", &ch);
 if (ch == '1'){
  s *temp = (s*)malloc(sizeof(s));
  while (p != NULL)
  {
   while (p->next != NULL)     //按照學(xué)號(hào)大小排序 
   {
    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("請(qǐng)輸入次數(shù)");
 scanf("%d",&n); 
 while(n)
 {
  printf("請(qǐng)輸入姓名\n"); 
  scanf("%s",&s1);
  fputs(s1,fp);
  printf("請(qǐng)輸入日期\n"); 
  scanf("%s",&date);
  fputs(date,fp);
  printf("請(qǐng)輸入名稱\n"); 
  scanf("%s",&item);
  fputs(item,fp);
  printf("請(qǐng)輸入金額");
  scanf("%s",&count);
   fputs(count,fp);
  n--;
 }
    fclose(fp);
 printf("三秒后返回主菜單"); 
 Sleep(3000);
 menu();
}
void print()
{   //打印所有財(cái)務(wù)數(shù)據(jù) 
 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);    //獲取文件內(nèi)容 
      printf("%s",str);     //打印內(nèi)容 
             
 printf("\n");
    printf("1返回主菜單");fclose(fp); //關(guān)閉文件
    scanf("%d",&qq);
    if(qq==1)
    {
     menu();
 }
  
     
 } 
void printall()
{    //打印所有是學(xué)生信息函數(shù) 
 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);
             }     //打印內(nèi)容 
    fclose(fp);                  //關(guān)閉文件 
  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 請(qǐng)進(jìn)行初始化操作!\n");
  for(i=1;i<=50;i++)/*用來做分割線*/ 
     printf("%c",ch);
  getch();   /*是輸入一個(gè)字符,但不顯示在屏幕上*/
  do{
   printf("\n 設(shè)置密碼,不得超過八位數(shù) \n");
   for(i=0;i<8&&((s[i]=getch())!=13);i++)    /*13代表的是回車*/
       putch('*'); /*顯示字符*/
   printf("\n 再確認(rè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 兩次密碼輸入不一致,請(qǐng)重新輸入 \n");
   else break;
  } while(1);   /*當(dāng)括號(hào)里是1時(shí)表示無限循環(huán)*/
   if((fp1=fopen("file.txt","w"))==NULL){
    printf("\n 系統(tǒng)創(chuàng)建失敗,請(qǐng)按任意鍵退出 \n");  /*打開文件,把密碼存進(jìn)去*/ 
    getch();
    exit(1);
   }
  for(i=0;s[i]!='\0';i++)
      putw(s[i],fp1);     /*將數(shù)組元素(即密碼)放入文件中*/
  fclose(fp1);            /*關(guān)閉文件*/ 
  printf("\n 系統(tǒng)初始化成功,按任意鍵退出后,再重新進(jìn)入 \n");
  getch();
  exit(1);   
 }
 else{    
     i=0;
  while(!feof(fp)&&i<8)
      s2[i++]=getw(fp);  /*從文件讀出字符賦給數(shù)組*/ 
  s2[i]='\0'; 
  strcpy(password,s2);   /*將數(shù)組s2的字符復(fù)制給password*/
//     enroll();    
 }
 if((fp=fopen("file2.txt","r"))==NULL) 
 {
  printf("\n 請(qǐng)進(jìn)行初始化操作!\n");
  for(i=1;i<=50;i++)/*用來做分割線*/ 
     printf("%c",ch);
  getch();   /*是輸入一個(gè)字符,但不顯示在屏幕上*/
  do{
   printf("\n 設(shè)置密碼,不得超過八位數(shù) \n");
   for(i=0;i<8&&((s[i]=getch())!=13);i++)    /*13代表的是回車*/
       putch('*'); /*顯示字符*/
   printf("\n 再確認(rè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 兩次密碼輸入不一致,請(qǐng)重新輸入 \n");
   else break;
  } while(1);   /*當(dāng)括號(hào)里是1時(shí)表示無限循環(huán)*/
   if((fp1=fopen("file2.txt","w"))==NULL){
    printf("\n 系統(tǒng)創(chuàng)建失敗,請(qǐng)按任意鍵退出 \n");  /*打開文件,把密碼存進(jìn)去*/ 
    getch();
    exit(1);
   }
  for(i=0;s[i]!='\0';i++)
      putw(s[i],fp1);     /*將數(shù)組元素(即密碼)放入文件中*/
  fclose(fp1);            /*關(guān)閉文件*/ 
  printf("\n 系統(tǒng)初始化成功,按任意鍵退出后,再重新進(jìn)入 \n");
  getch();
  exit(1);   
 }
 else{    
     i=0;
  while(!feof(fp)&&i<8)
      s3[i++]=getw(fp);  /*從文件讀出字符賦給數(shù)組*/ 
  s2[i]='\0'; 
  strcpy(password2,s3);   /*將數(shù)組s2的字符復(fù)制給password*/
      
 }
//  enroll();  
}
void enroll()
{     //登錄函數(shù)
    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("              |               歡迎使用財(cái)務(wù)管理系統(tǒng)                            |              \n"); 
 printf("              |                                                               |              \n");
 printf("              |              請(qǐng)選擇登錄方式:1管理員登錄       2班級(jí)成員登錄  |              \n");
 printf("              ----------------------------------------------------------------               \n"); 
 if(getch()=='1') 
 {
  log=1;
 }else
 {
  log=2;
 }
    switch(log)
    {
     case 1:   
                 printf("請(qǐng)輸入賬號(hào)\n");
                 scanf("%d",&ac);
              while(n)
                 {
               printf("\n");
            printf("請(qǐng)輸入密碼"); 
      for(i=0;i<8&&((str[i]=getch())!=13);i++)
        putch(str[i]);   //獲取鍵盤輸入的內(nèi)容 
      str[i]='\0';
      for(int j=0;j<i;j++)
      {
      if(str[j]!=password[j])
      {
          flag=1;           //判斷輸入的密碼和本地文件內(nèi)的密碼是否相同 
      }
      else{
      flag=0;
      } 
         } 
                        if(flag)
                        {
                         printf("輸入錯(cuò)誤密碼");
                         n--;     //密碼錯(cuò)誤可用次數(shù)減一 
      }
         if(flag==0)
         {
          break;             //密碼正確退出循環(huán) 
      }
        }
        if(n=0 )
     {
      printf("你輸入五次錯(cuò)誤密碼,請(qǐng)退出");  
      getch();
      exit(1);  /*非正常運(yùn)行導(dǎo)致退出程序*/ 
     } 
              break;
     case 2:   
                 printf("請(qǐng)輸入賬號(hào)\n");
                 scanf("%d",&ac);
              while(n)
              {
               printf("\n");
            printf("請(qǐng)輸入密碼"); 
      for(i=0;i<8&&((str[i]=getch())!=13);i++)
        putch(str[i]);                 //獲取鍵盤輸入的內(nèi)容 
      str[i]='\0';
      for(int j=0;j<i;j++)
      {
      if(str[j]!=password2[j])
      {
       flag=1;            //判斷輸入的密碼和本地文件內(nèi)的密碼是否相同 
      }
      else{
       flag=0;
      } 
      }
      if(flag)
                        {
                         printf("你輸入錯(cuò)誤密碼");
                         n--;  //密碼錯(cuò)誤可用次數(shù)減一 
      }
      if(flag==0)
         {
          break;   //密碼正確退出循環(huán) 
      } 
     }
     if(n=0)
     {
      printf("你輸入五次錯(cuò)誤密碼,請(qǐng)退出");
      getch();
      exit(1);  /*非正常運(yùn)行導(dǎo)致退出程序*/ 
     }
    
              break;
   
  default:    printf("您輸入了無效數(shù)字");
              break; 
             
 }

}
int main()
{
 first(); //啟動(dòng)初始化函數(shù) 
 enroll(); //啟動(dòng)登錄函數(shù) 
  menu(); //啟動(dòng)菜單函數(shù) 
}

關(guān)于“C語言如何實(shí)現(xiàn)財(cái)務(wù)管理系統(tǒng)”這篇文章就分享到這里了,希望以上內(nèi)容可以對(duì)大家有一定的幫助,使各位可以學(xué)到更多知識(shí),如果覺得文章不錯(cuò),請(qǐng)把它分享出去讓更多的人看到。

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI