C语言实现自行车存放管理系统

2022-11-13 16:11:09 存放 管理系统 自行车

本文实例为大家分享了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();
}
 
}

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。

相关文章