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();
}

}

 

  • 20
    点赞
  • 95
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
目前大家比较熟悉共享单车的使用。请编制一个共享单车的管理程序,实现如下基本功能。假设有5种品牌的共享单车(品牌内容自定)。 针对该5种品牌的共享单车,自行设计一套包含每种单车的品牌名称、投放量、投放点、某一时间点的在用数量、每辆车的每天骑行次数及单次里程和总里程、开锁过程中发现的损坏次数等信息(所有相关数据均自行设计)的数据结构; 随着骑行活动的开展,待使用单车的数量将发生变化。要求能对每种单车的使用数量及待使用的数量进行查询统计并输出; 对于某一投放点的某一品牌的单车,如果无备用车(待使用的车均为备用车),或备用车均为损坏的车,系统应能给出信息提示; 对于损坏报修的车辆,系统能够进行及时的统计,并能在投放数量中削减损坏车辆的数量,形成真实的有效投放量; 能够对客户信息进行处理,包括注册的用户名、电话号码、骑行里程、骑行习惯(比如70%以上的出行时间集中在某个时间段,时间段按时钟整点划分)、每天平均的骑行时间等; 该系统能进行当日使用状况的统计,请用链表排序(排序算法不限)提示交易使用次数排在前三名的单车品牌; 假设每种单车的使用是收费的,如第一个小时是免费的,第二个小时开始每小时收费0.5元,各品牌可各自推出优惠收费条件(优惠条件请自定义),然后根据假设的使用情况,统计出各种品牌的日营业额,并对各品牌的受欢迎程度进行排序。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值