C語言實現自行車存放管理系統

本文實例為大傢分享瞭C語言實現自行車存放管理系統的具體代碼,供大傢參考,具體內容如下

系統包括以下內容

1.數據錄入:錄入系統基本數據,用數組或鏈表組織;

2.數據存儲:用文件的形式將錄入的數據存儲; 

3.數據讀寫:對文件中的數據可以進行讀寫操作;

4.數據修改:可以對已存在的舊數據進行修改操作;

5.數據插入:可以將新數據插入到任意指定的位置;

6.數據刪除:可以對已存在的舊數據進行刪除操作;

7.數據查詢:按要求對數據進行查詢,至少含兩項
                   簡單查詢以及一項組合查詢;

8.數據統計:按要求對數據進行統計
                    含簡單統計及綜合統計;

9.數據排序:按要求對數據進行排序
                    含升序排序及降序排序;

10.數據報表:按要求對數據打印報表,
                     依規定的報表格式對數據打印報表;

11.界面:設計總體菜單界面。

附加項目:

登錄、註冊部分;
(密碼設置密碼的隱式輸出、簡單的加密解密)

附代碼:

#include<stdio.h>
#include<stdlib.h>
#include<conio.h>
#include<string.h>
 
struct bicycle{
    char tele_num[12];//用戶的電話號碼 
    char name[13];//用戶的姓名
    char sex[7];//用戶的性別 
    char bic_num[12];//自行車的編號 
    struct bicycle *next;
};
 
 
int iCount=0;
struct bicycle *pHead=NULL;
 
void key(); 
void menu();
void create();
void print(); 
void insert();
void search();
void dele();
void modify();
void excheng(struct bicycle *pStra,struct bicycle *Midd); 
void sort(); 
 
int main(){
    
    
    menu();
    printf("123");
    
    return 0;
}
 
//密碼管理頁面 
void key(){   
    char key[20],m[20];
    FILE *k;
    k=fopen("key.txt","r");
    if(k==NULL)
    {   k=fopen("key.txt","wt");
        printf("請創建管理密碼:\n");
        scanf("%s",key);
        fprintf(k,"%s",key);
        fclose(k);
        printf("恭喜您創建成功!\n");
        getchar();
        printf("按任意鍵繼續...");
        getchar();
        return ;
    }
     else
     {  fscanf(k,"%s",m);
     fclose(k);
        printf("請輸入管理密碼:");
        scanf("%s",key);
        if(strcmp(m,key)==0)
        {
         printf("密碼正確!\n");
        getchar();
        printf("按任意鍵繼續...");
        getchar();
        return ;
        }
        else
        {
            printf("密碼錯誤!\n");
        getchar();
        printf("按任意鍵繼續...");
        getchar();
        return ;
        }
     }
}
 
//顯示景點的信息 
void menu(){
    key(); 
    int select=-1;
 
    while(select!=0){
      system("cls"); 
    printf("\n\n\t\t\t\t\t\t\t==============歡迎使用自行車管理系統==============\n");
    printf("\t\t\t\t\t\t\t\t=======請選擇功能列表=======\n");
    printf("\t\t\t\t\t\t\t\t1.錄入自行車的信息LV5\n");
    printf("\t\t\t\t\t\t\t\t2.修改自行車的信息LV5\n");
    printf("\t\t\t\t\t\t\t\t3.刪除自行車的信息LV5\n");
    printf("\t\t\t\t\t\t\t\t4.查詢自行車的信息LV5\n"); 
    printf("\t\t\t\t\t\t\t\t5.打印自行車的信息LV5\n");
    printf("\t\t\t\t\t\t\t\t6.自行車信息的排序LV5\n");
    printf("\t\t\t\t\t\t\t\t7.插入自行車的信息LV5\n");  
    printf("\t\t\t\t\t\t\t\t0.退   出   菜  單LV5\n");
    printf("\n請選擇:");
    scanf("%d",&select);
    switch(select){
      case 1:
          create(); 
          break; 
      case 2:
          modify(); 
         break;
      case 3:
      dele(); 
        break;
      case 4:
          search(); 
        break;    
      case 5:
          print(); 
        break;  
      case 6:
          sort(); 
        break;  
      case 7:
          insert(); 
        break;  
      case 0:break;
      default:
        exit(1);
        break;
    }
  }    
    
    
} 
 
//創建鏈表函數
void create(){
    //頁面優化
    system("cls");
    
    struct bicycle *pEnd,*pNew;
    struct bicycle *p;
    pEnd=pNew=(struct bicycle *)malloc(sizeof(struct bicycle));
 
    printf("請輸入存放自行車的信息(退出請按0):\n");
 
    //錄入自行車編號,編號不可以重復
    int flag1=1,flag2,n; 
    struct bicycle *pTemp;
    printf("\n自行車的編號(退出請按0):");
    scanf("%s",pNew->bic_num);
    
    while(flag1){
        if(strcmp(pNew->bic_num,"0")==0)  {
            flag1=1;
            break;
        }
 
        else{
            pTemp=pHead;
            n=iCount;
            flag2=1;
 
            while(n&&flag2){
               if(strcmp(pTemp->bic_num,pNew->bic_num)==0)  flag2=0;
               pTemp=pTemp->next;
               n=n-1;
            }    
            
            if(flag2==0){ 
                printf("請重新輸入,自行車編號%s存在!(退出請按0):\n",pNew->bic_num);
                printf("自行車的編號:"); 
                scanf("%s",pNew->bic_num); 
                flag1=1;
            }
 
            if(flag2==1) flag1=0;
        }
    }
    
    //錄入其他信息,如果flag1=0,則表明要退出,那麼其他信息不用再錄
    if(flag1!=1){    
        printf("姓名:");
        scanf("%s",pNew->name);
        
        //性別隻能輸入female或male,否則是不規范的
        while(1){
          printf("性別(female或male):");
          scanf("%s",pNew->sex);
          if(strcmp(pNew->sex,"female")==0||strcmp(pNew->sex,"male")==0) break;
          else printf("性別輸入不規范,請核對後重輸!\n");
        }
        
        //電話必須11位數,否則是不規范的
        while(1){
          printf("電話(11位數):");
          scanf("%s",pNew->tele_num);
          if(strlen(pNew->tele_num)==11) break;
          else printf("電話輸入不規范,必須11位數!\n");
        }
        
    }                                                  
 
 
 
 
    while(strcmp(pNew->bic_num,"0")!=0)
    {
        iCount++;
        
        if(pHead==NULL){
             pNew->next=NULL;
             pEnd=pNew;
             pHead=pNew;
            }
 
    
        else{
            
         p=pHead; 
    
        while(p&&p->next!=NULL) p=p->next;
        {
          p->next=pNew;
          pNew->next=NULL;
        }
        }
      pNew=(struct bicycle *)malloc(sizeof(struct bicycle));
 
 
      printf("\n自行車的編號(退出請按0):");                
      scanf("%s",pNew->bic_num);
      flag1=1;//每次循環結束flag1=1退出;flag1=0則繼續,所以要值0
      while(flag1){
          
        if(strcmp(pNew->bic_num,"0")==0){
            flag1=1;
            break;
        }
 
        else{
            pTemp=pHead;
            n=iCount;
            flag2=1;
 
            while(n&&flag2){
               if(strcmp(pTemp->bic_num,pNew->bic_num)==0)  flag2=0;
               pTemp=pTemp->next;
               n=n-1;
            }    
            
            if(flag2==0) { 
                printf("請重新輸入,自行車的編號%s存在!(退出請按0):\n",pNew->bic_num);
                printf("自行車的編號:"); 
                scanf("%s",pNew->bic_num); 
                flag1=1;
            }
 
            if(flag2==1) flag1=0;
        }
    }
    
    //錄入其他信息,如果flag1=0,則表明要退出,那麼其他信息不用再錄
    if(flag1!=1){    
        printf("姓名:");
        scanf("%s",pNew->name);
        
        //性別隻能輸入female或male,否則是不規范的
        while(1){
          printf("性別(female或male):");
          scanf("%s",pNew->sex);
          if(strcmp(pNew->sex,"female")==0||strcmp(pNew->sex,"male")==0) break;
          else printf("性別輸入不規范,請核對後重輸!\n");
        }
        
        //電話必須11位數,否則是不規范的
        while(1){
          printf("電話(11位數):");
          scanf("%s",pNew->tele_num);
          if(strlen(pNew->tele_num)==11) break;
          else printf("電話輸入不規范,必須11位數!\n");
        }
        
    }                                          //22
        
    }
 
    free(pNew);
}
 
//輸出鏈表自行車的信息
void print(){
    
    //頁面優化
    system("cls");
    printf("\n\n\t\t\t\t===================5.打印自行車的信息===================\n"); 
 
    struct bicycle *pTemp;
    int iIndex=1;
    
    printf("**********本名單中共有%d個自行車信息,所有的信息如下:**********\n",iCount);
    printf("序號 姓名  性別  電話 自行車編號 \n");
    pTemp=pHead;
 
    while(pTemp!=NULL){
        printf("%d  %s  %s  %s  %s\n",iIndex,pTemp->name,pTemp->sex,pTemp->tele_num,pTemp->bic_num);
        pTemp=pTemp->next;
        iIndex++;
    }
    printf("按任意鍵返回上一級"); 
   getch();
}
 
//插入自行車的信息
void insert(){
    //頁面優化
    system("cls");
    printf("\n\n\t\t\t\t===================7.插入自行車的信息===================\n"); 
    printf("#\n說明:插入任意位置都可以\n#");
    create();
   printf("插入信息成功,"); 
   printf("按任意鍵返回上一級"); 
   getch();
} 
 
//信息查詢函數
void search(){ 
    //頁面優化
    
    printf("\n\n\t\t\t\t===================4.查詢自行車的信息==================="); 
 
    int select=-1;
    while(select!=0){
       system("cls");
       printf("\n\t\t=======請選擇功能列表=======\n");
       printf("\t\t\t1.按自行車的編號查詢(lv4)\n");
       printf("\t\t\t2.按   姓  名  查 詢 (lv1)\n");
       printf("\t\t\t0.退出此頁面(lv4)\n");
  
       printf("請選擇:");
       scanf("%d",&select);
    
       
       int flag=1,flag1=1;
       char number[12];
       char name[12];
       struct bicycle *pTemp=pHead;
 
       //按自行車的編號查詢
       if(select==1){
           
       printf("請輸入你要查找的自行車編號:");
       scanf("%s",number);
           while(pTemp!=NULL&&flag)
           {
             if(strcmp(pTemp->bic_num,number)==0)
             { 
                printf("%s找到瞭,具體信息如下:\n\n",number);
                
                printf("\t姓名  性別  電話 自行車編號 \n");
                printf("\t%s  %s  %s  %s\n",pTemp->name,pTemp->sex,pTemp->tele_num,pTemp->bic_num);
                 printf("\n");
                 flag=0; 
             }
             pTemp=pTemp->next;
           }
       if(flag==1)  printf("編號%s不存在!\n",number);
       }
 
       //按姓名查詢
       if(select==2){
       printf("請輸入你要查找的姓名:");
       scanf("%s",name);
           while(pTemp!=NULL&&flag)
           {
             if(strcmp(pTemp->name,name)==0) 
             { 
                 printf("%s找到瞭,具體信息如下\n",name);   
                  printf("\t姓名  性別  電話 自行車編號 \n");
                printf("\t%s  %s  %s  %s\n",pTemp->name,pTemp->sex,pTemp->tele_num,pTemp->bic_num);
                 printf("\n");
                 flag=0;  
             }
             pTemp=pTemp->next;
           }
       if(flag==1)  printf("姓名%s不存在!",name);
       }
    printf("按任意鍵返回上一級");
    getch();
    }
}
 
//刪除信息函數
void dele(){
    //頁面優化
    system("cls");
    printf("\n\n\t\t\t\t===================3.刪除自行車的信息(按編號)==================="); 
 
    int select=-1; 
    while(select!=0){
       
       printf("\n\t\t=======請選擇功能列表=======\n");
       printf("\t\t\t1.按自行車的編號刪除(lv4)\n");
       printf("\t\t\t2.按   姓  名  刪 除 (lv1)\n");
       printf("\t\t\t0.退出此頁面(lv4)\n");
  
       printf("請選擇:");
       scanf("%d",&select);
    
    if(select==0) return;
    else if(select==1||select==2) break;
    else printf("輸入有誤請重新輸入\n");
}
 
if(select==1){
        
        if(iCount==0)  printf("\n\n暫無數據無法進行此操作,按任意鍵退出!\n");
        else
        {                                                              //33
    
        char number[12];
        int  i,flag=1;
        char option;
        struct bicycle *pTemp;
        struct bicycle *pPre;
        pTemp=pHead;
    
        int iIndex=0;
        printf("\n請輸入要刪除自行車的編號:");
        scanf("%s",number);
    
        while(pTemp!=NULL&&flag){
            if(strcmp(pTemp->bic_num,number)==0){
                printf("\n%s找到瞭,將要刪除的信息如下\n\n",number);
                //顯示將要刪除人的信息
                 printf("\t姓名  性別  電話 自行車編號 \n");
                printf("\t%s  %s  %s  %s\n",pTemp->name,pTemp->sex,pTemp->tele_num,pTemp->bic_num);
                 printf("\n");
                     flag=0; 
                     
                printf("確認刪除請輸1,否則按任意數字鍵退出\n");
                scanf("%d",&option);
            }
    
    
            pTemp=pTemp->next;
            iIndex++;
        }
        if(flag==1)  {printf("編號%s不存在!",number);  return;}
    
    
    
           if(option==1){
            pTemp=pHead;
            pPre=pTemp;//可能多餘
            //printf("----------刪除第%d個學生----------\n",iIndex);
    
           if(iIndex!=1)
           {
               for(i=1;i<iIndex;i++)
               {
               pPre=pTemp;
               pTemp=pTemp->next;
               }
    
                pPre->next=pTemp->next;
    
           }
    
    
          if(iIndex==1)    pHead=pTemp->next;
          free(pTemp);
          iCount--;
          printf("刪除成功按任意鍵退出!");
        }
       else  printf("刪除失敗按任意鍵退出!");
        }                                                               //33
        
        getch();
        
}
else{
    
    
    if(iCount==0)  printf("\n\n暫無數據無法進行此操作,按任意鍵退出!\n");
    else
    {                                                              //33
 
    char name[12];
    int  i,flag=1;
    char option;
    struct bicycle *pTemp;
    struct bicycle *pPre;
    pTemp=pHead;
 
    int iIndex=0;
    printf("\n請輸入要刪除自行車對應戶主的姓名:");
    scanf("%s",name);
 
    while(pTemp!=NULL&&flag){
        if(strcmp(pTemp->name,name)==0){
            printf("\n%s找到瞭,將要刪除的信息如下\n\n",name);
            //顯示將要刪除人的信息
             printf("\t姓名  性別  電話 自行車編號 \n");
            printf("\t%s  %s  %s  %s\n",pTemp->name,pTemp->sex,pTemp->tele_num,pTemp->bic_num);
             printf("\n");
                 flag=0; 
                 
            printf("確認刪除請輸1,否則按任意數字鍵退出\n");
            scanf("%d",&option);
        }
 
 
        pTemp=pTemp->next;
        iIndex++;
    }
    if(flag==1)  {printf("姓名%s不存在!",name);  return;}
 
 
 
       if(option==1){
        pTemp=pHead;
        pPre=pTemp;//可能多餘
        //printf("----------刪除第%d個學生----------\n",iIndex);
 
       if(iIndex!=1)
       {
           for(i=1;i<iIndex;i++)
           {
           pPre=pTemp;
           pTemp=pTemp->next;
           }
 
            pPre->next=pTemp->next;
 
       }
 
 
      if(iIndex==1)    pHead=pTemp->next;
      free(pTemp);
      iCount--;
      printf("刪除成功按任意鍵退出!");
    }
   else  printf("刪除失敗按任意鍵退出!");
    }                                                               //33
    
    getch();
}
 
}
 
//2.修改自行車的信息
void modify(){
    
    //頁面優化
    system("cls");
    printf("\n\n\t\t\t\t===================2.修改自行車的信息==================="); 
 
    int post;
    int flag=1,flag1;
    char number[12];
    struct bicycle *pTemp=pHead,*pPre=pTemp;
    
    printf("\n請輸入你要修改自行車信息對應自行車的編號:");
    scanf("%s",number);
    
    while(pTemp!=NULL&&flag)
    {
 
        if(strcmp(pTemp->bic_num,number)==0) 
        {
            printf("將要修改的學號%s具體信息如下\n",number);
              printf("\t姓名  性別  電話 自行車編號 \n");
            printf("\t%s  %s  %s  %s\n",pTemp->name,pTemp->sex,pTemp->tele_num,pTemp->bic_num);
             printf("\n");
             flag=0; 
        }
        pPre=pTemp;//保存pTemp
        pTemp=pTemp->next;
    }
    
    if(flag==1)  printf("你要修改的學號%s不存在!",number);
    else 
    {
        printf("確認修改請按1,放棄請按任意數字鍵!\n請選擇:");
        scanf("%d",&post);
        
        while(post==1)
        {
            printf("請選擇你要修改的項目(1.姓名 2.性別 3.電話號碼 4.自行車的編號 5.修改全部)\n");
            scanf("%d",&flag1);
 
           if(flag1==1)
           {
               printf("新姓名:");
               scanf("%s",pPre->name);
               printf("修改完成,按任意鍵退出!");
           }
 
           else if(flag1==2)
           {
               printf("新性別:");
               scanf("%s",pPre->sex);
               printf("修改完成,按任意鍵退出!");
           }
 
           else if(flag1==3)
           {
               
              while(1){
              printf("電話(11位數):");
              scanf("%s",pPre->tele_num);
              if(strlen(pPre->tele_num)==11) break;
              else printf("電話輸入不規范,必須11位數!\n");
                }    
                
               printf("修改完成,按任意鍵退出!");
           }
 
           else if(flag1==4)
           {
               printf("新編號:");
               scanf("%d",&pPre->bic_num);
               printf("修改完成,按任意鍵退出!");
           }
 
            else{
                
               printf("新姓名:");
               scanf("%s",pPre->name);
              
               printf("新性別:");
               scanf("%s",pPre->sex);
               
              while(1){
              printf("電話(11位數):");
              scanf("%s",pPre->tele_num);
              if(strlen(pPre->tele_num)==11) break;
              else printf("電話輸入不規范,必須11位數!\n");
            }    
                
               printf("新編號:");
               scanf("%s",pPre->bic_num);
            
            }
            break;    
        }
    
    
    }
 
    printf("修改完成,按任意鍵退出"); 
    getch();
 
}
 
//交換函數
void excheng(struct bicycle *pStra,struct bicycle *pMidd){
    int t;
    struct bicycle *pTemp;
    pTemp=(struct bicycle *)malloc(sizeof(struct bicycle));
 
    strcpy(pTemp->tele_num,pStra->tele_num);
    strcpy(pStra->tele_num,pMidd->tele_num);
    strcpy(pMidd->tele_num,pTemp->tele_num);
 
    strcpy(pTemp->bic_num,pStra->bic_num);
    strcpy(pStra->bic_num,pMidd->bic_num);
    strcpy(pMidd->bic_num,pTemp->bic_num);
    
    strcpy(pTemp->name,pStra->name);
    strcpy(pStra->name,pMidd->name);
    strcpy(pMidd->name,pTemp->name);
 
    strcpy(pTemp->sex,pStra->sex);
    strcpy(pStra->sex,pMidd->sex);
    strcpy(pMidd->sex,pTemp->sex);
 
    free(pTemp);
 
}
 
//6.自行車信息的排序
void sort(){
    
    //頁面優化
    printf("\n\n\t\t===================4.排序系統==================="); 
 
    int i,j;
    struct bicycle *pStra,*pMidd;
 
    int result;
    int select=-1;
    while(select!=0)
    {
       system("cls");
       printf("\n\t\t\t=======請選擇功能列表=======\n");
       printf("\t\t\t1.按自行車編號升序排序(lv4)\n");
       printf("\t\t\t2.按自行車編號降序排序(lv1)\n");
       printf("\t\t\t3.按姓名升序排序(lv4)\n");
       printf("\t\t\t4.按姓名降序排序(lv1)\n");
       printf("\t\t\t0.退出此頁面(lv4)\n");
  
       printf("請選擇:");
       scanf("%d",&select);
 
        result=select;
        if(select!=1&&select!=2&&select!=3&&select!=4) return;
        
 
    pStra=pHead;
    pMidd=pStra->next;
    
    
     for(i=0;i<iCount;i++)
     {
        pStra=pHead;
        pMidd=pStra->next;
 
          for(j=0;j<iCount-i-1&&pMidd!=NULL;j++)
          {
              if(result==1)  {if(strcmp(pStra->bic_num,pMidd->bic_num)>0)           excheng(pStra,pMidd);}
              else if(result==2)  {if(strcmp(pStra->bic_num,pMidd->bic_num)<0)      excheng(pStra,pMidd);}
              else if(result==3)  {if(strcmp(pStra->name,pMidd->name)>0)    excheng(pStra,pMidd);}
              else if(result==4)  {if(strcmp(pStra->name,pMidd->name)<0)    excheng(pStra,pMidd);}
            pStra=pMidd;
            pMidd=pMidd->next;
          }                               
     }
 
 
 printf("\t\t\t5.顯示排完序後的結果為:\n\n");
 printf("------------------------------------------------------");
     struct bicycle *pTemp;
    int iIndex=1;
    
    printf("**********本名單中共有%d個自行車信息,所有的信息如下:**********\n",iCount);
    printf("序號 姓名  性別  電話 自行車編號 \n");
    pTemp=pHead;
 
    while(pTemp!=NULL){
        printf("%d  %s  %s  %s  %s\n",iIndex,pTemp->name,pTemp->sex,pTemp->tele_num,pTemp->bic_num);
        pTemp=pTemp->next;
        iIndex++;
    }
 
 printf("------------------------------------------------------");
 
 
 printf("\n\n排序成功,按任意鍵返回!");
 
    getch();
}
 
}

以上就是本文的全部內容,希望對大傢的學習有所幫助,也希望大傢多多支持WalkonNet。

推薦閱讀: