神来之天机书枢

最近闲来无事,想着做出一个好看且互动性高的图书管理系统。

先上最后源码:

#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include<Windows.h>

#define cycpher 123456

typedef struct library{
	   
	   char name[50];
	   
	   double price;
	   library *next;
}library; 

//这就是函数// 
void print(library *head);
void login();
struct library *add_book(library *head);
void dele(library *head); 
void insert(library *head);
void cut(library *head);
void change(library *head);

//主体部分// 
int main(void){ 
        
        system("title 图书管理系统");//设置主题 
		system("color f0");//设置背景为亮白黑体字 
		system("mode con cols=80 lines=20"); //设置框的大小 
		
		
		login(); 
		printf("请先录入图书(输入1开始)\n");   
        
        int  c;
        library *head=NULL;
		
		scanf("%d",&c);
	    while(c==1){
	      head = add_book(head);
	      	print(head);
	      printf("按1继续: ");
	      scanf("%d",&c);
		}
	Again:	
		if(head != NULL){ 
		   printf("***选项***\n1.插入图书\n2.删除图书\n3.修改图书\n");
		   int order;
		   scanf("%d",&order);
		   switch(order){
		   	    case 1:insert(head);print(head);break;
		   	    	case 2:cut(head);print(head);break;
		   	    		case 3: change(head);print(head);break;
		   }
		}
		printf("是否回到选项页面(y/n):");
	     scanf(" %c",&c);
	
		if(c=='y'){ 
		   goto Again;//此处使用可以增加实用性 
		} 
		
		
		printf("\n******欢迎使用******");
		
		dele(head);//申请空间需要释放 
		
		return 0;
} 

void login(){ 

       printf("******欢迎登录图书管理系统******");
       printf("\n正在加载中\n");
       
	   for(int i=0;i<=100;i++){
       	    printf("%d\r",i);
       	    Sleep(10);
       	    if(i==99){
       	    	   Sleep(1000);
			   }
	     }
	   printf("\n请输入密码(初始密码123456,备用密码111):");
	   
       int a;
       scanf("%d",&a);
         
		 switch(a){ 
         case cycpher:   system("cls");break;
         case 111:  printf("***启用备用密码***");Sleep(1000);system("cls");break;
         default:   printf("密码错误");exit(0);break;
	              }
}

library *add_book(library *head){
	  
	   library *p=NULL,*pr=head;
	   p=(library *)malloc(sizeof(library));
	   
	   if(p == NULL){ 
	      printf("\n内存不足");exit(0);
	   }
	   
	   if(head == NULL){ 
	         head=p;   
	   }
	   else{ 
	      while(pr->next != NULL){ 
	        pr=pr->next;
		  }
		  pr->next=p;
	   }
	   
	   printf("\n输入书名:") ; scanf("%s",&p->name);
	   printf("\n输入价格:");  scanf("%lf",&p->price);
	   p->next=NULL;
	   
	   return head;
}

void print(library *head){ 
   library *pr=head;
   
   while(pr != NULL){
   	   printf("\t书名:%s\n\t价格:%f\n\n",pr->name,pr->price);
   	   pr = pr->next;
   }
   
}

void dele(library *head){
	   library *p=NULL,*pr=head;
	   while(pr != NULL){ 
	       p=pr;
	       pr=pr->next;
	       free(p);
	   }
}

void insert(library *head){ 
      printf("你想在第几个加入:");
      int n;
      scanf("%d",&n);
      library *p=head,*pr=NULL;
      pr=(library *)malloc(sizeof(library));
	  int i;
     
	  for(i=0;i<n-1;i++){ 
           p=p->next;
	  }
	
	  pr->next=p->next;
	  p->next=pr;
	 
	  printf("录入图书:");
	  scanf("%s",&pr->name);
	  printf("输入价格:");
	  scanf("%lf",&pr->price);
}

void change(library *head){ 
        printf("你想修改第几本书:");
        int n;
        scanf("%d",&n);
        library *p=head;
        int i=0;
		for(i=0;i<n-1;i++){
		      p=p->next;
		} 
		printf("输入修改后的值:\n录入图书:");
		scanf("%s",&p->name);
		printf("输入价格:");
		scanf("%lf",&p->price);           
}

void cut(library *head){
	    printf("你想删除第几本:");
	    int n;
	    scanf("%d",&n);
	    library *p=head,*pr=NULL;
	    int i;
	    for(i=0;i<n-2;i++){ 
	       p=p->next;
		}
		pr=p->next;
		p->next=pr->next;
		free(pr);
}

为了设计出像样的效果,尽量真实。

1.我们需要用到<Windows.h>库来定义我们的显示框主题,显示的背景以及一些假动画(通过\r和sleep()函数制造假的加载条)

2.使用goto使得程序可以反复进行

3.通过单链表进行存储与修改

如果有哪里不明白请说明呀!!

上一篇:FreeRTOS-中断相关坑


下一篇:[数据分析与可视化] 数据绘图要点3-意大利面条图