最近闲来无事,想着做出一个好看且互动性高的图书管理系统。
先上最后源码:
#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.通过单链表进行存储与修改
如果有哪里不明白请说明呀!!