首頁 > 軟體

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

2022-08-31 14:03:39

本文範例為大家分享了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("nnttttttt==============歡迎使用自行車管理系統==============n");
    printf("tttttttt=======請選擇功能列表=======n");
    printf("tttttttt1.錄入自行車的資訊LV5n");
    printf("tttttttt2.修改自行車的資訊LV5n");
    printf("tttttttt3.刪除自行車的資訊LV5n");
    printf("tttttttt4.查詢自行車的資訊LV5n"); 
    printf("tttttttt5.列印自行車的資訊LV5n");
    printf("tttttttt6.自行車資訊的排序LV5n");
    printf("tttttttt7.插入自行車的資訊LV5n");  
    printf("tttttttt0.退   出   菜  單LV5n");
    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("nntttt===================5.列印自行車的資訊===================n"); 
 
    struct bicycle *pTemp;
    int iIndex=1;
    
    printf("**********本名單中共有%d個自行車資訊,所有的資訊如下:**********n",iCount);
    printf("序號 姓名  性別  電話 自行車編號 n");
    pTemp=pHead;
 
    while(pTemp!=NULL){
        printf("%d  %s  %s  %s  %sn",iIndex,pTemp->name,pTemp->sex,pTemp->tele_num,pTemp->bic_num);
        pTemp=pTemp->next;
        iIndex++;
    }
    printf("按任意鍵返回上一級"); 
   getch();
}
 
//插入自行車的資訊
void insert(){
    //頁面優化
    system("cls");
    printf("nntttt===================7.插入自行車的資訊===================n"); 
    printf("#n說明:插入任意位置都可以n#");
    create();
   printf("插入資訊成功,"); 
   printf("按任意鍵返回上一級"); 
   getch();
} 
 
//資訊查詢函數
void search(){ 
    //頁面優化
    
    printf("nntttt===================4.查詢自行車的資訊==================="); 
 
    int select=-1;
    while(select!=0){
       system("cls");
       printf("ntt=======請選擇功能列表=======n");
       printf("ttt1.按自行車的編號查詢(lv4)n");
       printf("ttt2.按   姓  名  查 詢 (lv1)n");
       printf("ttt0.退出此頁面(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找到了,具體資訊如下:nn",number);
                
                printf("t姓名  性別  電話 自行車編號 n");
                printf("t%s  %s  %s  %sn",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  %sn",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("nntttt===================3.刪除自行車的資訊(按編號)==================="); 
 
    int select=-1; 
    while(select!=0){
       
       printf("ntt=======請選擇功能列表=======n");
       printf("ttt1.按自行車的編號刪除(lv4)n");
       printf("ttt2.按   姓  名  刪 除 (lv1)n");
       printf("ttt0.退出此頁面(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("nn暫無資料無法進行此操作,按任意鍵退出!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找到了,將要刪除的資訊如下nn",number);
                //顯示將要刪除人的資訊
                 printf("t姓名  性別  電話 自行車編號 n");
                printf("t%s  %s  %s  %sn",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("nn暫無資料無法進行此操作,按任意鍵退出!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找到了,將要刪除的資訊如下nn",name);
            //顯示將要刪除人的資訊
             printf("t姓名  性別  電話 自行車編號 n");
            printf("t%s  %s  %s  %sn",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("nntttt===================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  %sn",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("nntt===================4.排序系統==================="); 
 
    int i,j;
    struct bicycle *pStra,*pMidd;
 
    int result;
    int select=-1;
    while(select!=0)
    {
       system("cls");
       printf("nttt=======請選擇功能列表=======n");
       printf("ttt1.按自行車編號升序排序(lv4)n");
       printf("ttt2.按自行車編號降序排序(lv1)n");
       printf("ttt3.按姓名升序排序(lv4)n");
       printf("ttt4.按姓名降序排序(lv1)n");
       printf("ttt0.退出此頁面(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("ttt5.顯示排完序後的結果為:nn");
 printf("------------------------------------------------------");
     struct bicycle *pTemp;
    int iIndex=1;
    
    printf("**********本名單中共有%d個自行車資訊,所有的資訊如下:**********n",iCount);
    printf("序號 姓名  性別  電話 自行車編號 n");
    pTemp=pHead;
 
    while(pTemp!=NULL){
        printf("%d  %s  %s  %s  %sn",iIndex,pTemp->name,pTemp->sex,pTemp->tele_num,pTemp->bic_num);
        pTemp=pTemp->next;
        iIndex++;
    }
 
 printf("------------------------------------------------------");
 
 
 printf("nn排序成功,按任意鍵返回!");
 
    getch();
}
 
}

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支援it145.com。


IT145.com E-mail:sddin#qq.com