C语言图书管理信息系统

Python012

C语言图书管理信息系统,第1张

借书的限制:教师180天,借15本;学生120天,借10本

图书的信息:      书的编号号,书名,作者,书的种类,书的总量以及书的剩余量

学生/教师信息:   学号/工号(4位数字字符),姓名,借书日期,还书日期(以此判定是否超出有效期)

(一)、查询:(无条件或有条件指按所有字段查询)

一、单链表上实现图书信息管理

利用链表结构实现图书存储

二 、二叉排序树或平衡树上实现图书信息管理

利用二叉排序树或平衡树实现图书的存储

三、B_树的操作(手工题)

插入、删除操作:

从空的3阶B_树开始,依次插入20,30,50,52,60,68,70,10,80,90,40,75。画出建树过程,然后分别画出删除50,60,10,75,20的B_树状态。

1.课程设计的题目内容要求

2.数据结构的设计思想和任务的总体结构

链接: https://pan.baidu.com/s/11BBC4ec7x3l62u83lJeGpw

提取码:1234

这个功能比较少,可能符合你的要求,对于查询功能,自己可以添加修改结构体,注意数据格式就行了,另外还有一个用类编写的,功能也多一些,要的话留邮箱

#include<iostream>

#include<stdio.h>

#include<stdlib.h>

#include<string.h>

using namespace std

typedef struct stu

{

char name[20]

long int number

int snum

char sex[20]

char add[30]

char time[20]

char tel[20]

struct stu *next

}stu,*student

int init(student &s)

void insert(student &s)

void print(student &s)

int delete(student &s)

void find (student &s)

void findname(student &s)

void findnum(student &s)

void modifay(student &s)

void putfile(student &s)

void getfile(student &s)

void main()

{

student s

init(s)

cout<<"欢迎使用学生管理系统."<<endl

cout<<" "<<endl

cout<<endl

while(1)

{

int i

mainint:

cout<<"请选择相关操作:"<<endl<<"1.建立学生资料文件."<<endl<<"2.浏览."<<endl<<"3.删除."<<endl

cout<<"4.查询."<<endl<<"5.修改."<<endl<<"6.打开学生文件."<<endl<<"7.退出管理系统." <<endl<<"请选择:"

cin>>i

if(i<0||i>7)

{

cout<<"输入了错误的数字,Again!"<<endl<<endl

goto mainint

}

switch(i)

{

case 1: insert(s)break

case 2: print(s)

putfile(s)

break

case 3: ldelete(s)break

case 4: find(s)break

case 5: modifay(s)

break

case 6: getfile(s)break

case 7: exit(0)

}

}

}

int init(student &s)

{

s=(student)malloc(sizeof(stu))

if (s)

{

s->next=NULL

return 0

}

else return -1

}

void insert(student &s) //insert

{

cout<<endl

student p,q

p=(student)malloc(sizeof(stu))

cout<<"请输入学生信息:"<<endl

cout<<"姓名:"

cin>>p->name

cout<<endl

cout<<"学号:"

cin>>p->number

cout<<endl

cout<<"性别:"

cin>>p->sex

cout<<endl

cout<<"家庭住址:"

cin>>p->add

cout<<endl

cout<<"出生年月:"

cin>>p->time

cout<<endl

cout<<"宿舍号:"

cin>>p->snum

cout<<endl

cout<<"宿舍号码:"

cin>>p->tel

q=s

while(!(q->next==NULL)&&(q->next->number<p->number))

q=q->next

p->next=q->next

q->next=p

//if()p->next=NULL

//free(p)

}

int ldelete(student &s) //delete

{

cout<<endl

student p,a

p=s

cout<<"请输入删除的学号:"

long int number

cin>>number

while(p)

{ if (p->number==number)

{

a->next=p->next

free(p)return(0)}

else

{ a=p

p=p->next} }

cout<<"没有找到你要删除的选项!"<<endl<<endlreturn(-1)

}

void print(student &s)

{

int a

a=0

student p

p=s->next

cout<<"姓名 "<<"学号 " <<"性别 "<<"家庭住址 "<<"出生年月 "<<"宿舍号"<<"宿舍号码"<<endl

while(p)

{

a++

cout<<p->name<<" "<<p->number<<" "<<p->sex<<" "<<p->add<<" "<<p->time<<" "<<p->snum<<" "<<p->tel<<" "<<endl

p=p->next

}

cout<<endl

if (a==0)

cout<<"还没有学生信息!"<<endl<<endl

}

void find (student &s) //find

{

findl:

cout<<"请选择查找方法:"<<endl<<"1.按姓名查找."<<endl<<"2.按学号查找."<<endl

cout<<"请选择:"

int k

cin>>k

if(k<0||k>3)

{

cout<<"输了入错误数字,Again!"<<endl<<endl

goto findl

}

switch(k)

{

case 1: findname(s)break

case 2: findnum(s)break

}

}

void findname(student &s) //find by name

{

student p

p=s->next

cout<<"请输入姓名:"

char name[20]

int j

j=0

cin>>name

cout<<"你要查找的资料是:"<<endl

cout<<"姓名 "<<"学号 " <<"性别 "<<"家庭住址 "<<"出生日期 "<<"宿舍号 "<<"宿舍号码"<<endl

while(p)

{

if (strcmp(p->name,name)==0)

{

cout<<p->name<<" "<<p->number<<" "<<p->sex<<" "<<p->add<<" "<<p->time<<" "<<p->snum<<" "<<p->tel<<" "<<endl

j++

}

p=p->next

}

cout<<endl

if(j==0)

cout<<"对不起,没找到你要的信息!"<<endl<<endl

}

void findnum(student &s) //find by number

{

student p

p=s->next

cout<<"请输入学号:"

long int number

int j

j=0

cin>>number

cout<<"你要查找的资料是:"<<endl

cout<<"姓名 "<<"学号 "<<"性别 "<<"家庭住址 "<<"出生日期 "<<"宿舍号 "<<"宿舍电话"<<endl

while(p)

{

if (p->number==number)

{

cout<<p->name<<" "<<p->number<<" "<<p->sex<<" "<<p->add<<" "<<p->time<<" "<<p->snum<<" "<<p->tel<<" "<<endl

j++

}

p=p->next

}

cout<<endl

if(j==0)

cout<<"对不起,没找到你要的信息"<<endl<<endl

}

void modifay(student &s) //modifay

{

student q,p,l,m

int j

j=0

q=s->next

l=s

m=s

cout<<"请输入要修改的学号:"

long int num

cin>>num

cout<<"姓名 "<<"学号 "<<"性别 "<<"家庭住址 "<<"入学时间 "<<"宿舍号 "<<"电话号码"<<endl

while(q)

{

if (q->number==num)

{

cout<<"你要修改的信息是:"<<endl

cout<<q->name<<" "<<q->number<<" "<<q->sex<<" "<<q->add<<" "<<q->time<<" "<<q->snum<<" "<<q->tel<<" "<<endl

j++

p=(student)malloc(sizeof(stu))

cout<<"请输入新的学生信息:"<<endl

cout<<"姓名:"

cin>>p->name

cout<<endl

cout<<"学号:"

cin>>p->number

cout<<endl

cout<<"年龄:"

cin>>p->age

cout<<endl

cout<<"性别:"

cin>>p->sex

cout<<endl

cout<<"家庭住址:"

cin>>p->add

cout<<endl

cout<<"入学时间:"

cin>>p->time

cout<<endl

cout<<"电话号码:"

cin>>p->tel

l->next=q->next

free(q)

goto tt

}

else

{

l=q

q=q->next

}

}

cout<<endl

if (j==0) cout<<"没找到你要的数据!"<<endl<<endl

tt:

while(!(m->next==NULL)&&(m->next->number<p->number))

m=m->next

p->next=m->next

m->next=p

}

void putfile(student &s)

{

student p

p=s->next

FILE *fp

if((fp=fopen("information.txt","w"))==NULL)

{

cout<<"打不开文件"<<endl<<endl

exit(0)

}

while(p)

{

if(fwrite(p,sizeof(struct stu),1,fp)!=1 )

{

cout<<"文件写入错误"<<endl<<endl

return

}

p=p->next

}

fclose(fp)

}

void getfile(student &s)

{

student p,q

q=s

FILE *fp1

if((fp1=fopen("information.txt","r"))==NULL)

{

cout<<"打不开文件"<<endl

exit(0)

}

cout<<"姓名 "<<"学号 "<<"性别 "<<"家庭住址 "<<"入学时间 "<<"宿舍号 "<<"电话号码"<<endl

p=(student)malloc(sizeof(stu))

while(fread(p,sizeof(struct stu),1,fp1)!=0)

{

cout<<p->name<<" "<<p->number<<" "<<p->sex<<" "<<p->add<<" "<<p->time<<" "<<p->age<<" "<<p->tel<<endl

while(!(q->next==NULL)&&(q->next->number<p->number))

q=q->next

p->next=q->next

q->next=p

p=(student)malloc(sizeof(stu))

}

fclose(fp1)

cout<<endl

}

#include<stdio.h>

#include<string.h>

#include<conio.h>

#include<stdlib.h>

#include<ctype.h>

#define STACK_INIT_SIZE 10

#define OK 1

#define TRUE 1

#define FALSE 0

#define ERROR 0

struct student /*定义学生类型,用于存放借出的书籍*/

{

int carnum

char lendbook[10]

}student[1000]

struct employ /*定义职工类型*/

{

int employnum

char employname[15]

int employage

char employsex[2]

char employleve[10]

long int employtage

}employ[50]

struct book /*定义书的类型*/

{

int booknum

char bookname[10]

char bookcreat[10]

int turefalse/*用于借书和还书模块判断一本书是否借出的条件*/

}book[1000]

struct car /*借书卡的数据类型*/

{

int carnum

char studentname[10]

int studentclass

}car[100]

huanbook() /*还书函数*/

{

FILE *fp,*fp2/*定义两个文件指针,fp2用于修改数据时设立临时文件用,防止数据遭破坏*/

int i,n

int carnum

char lendbook[10]

printf("请你输入你的卡号\n")

scanf("%d",&carnum)

fp=fopen("car.txt","r")/*读取卡号记录*/

for(i=0fread(&car[i],sizeof(struct car),1,fp)!=0i++) /*for循环判断卡号是否存在*/

{

if(car[i].carnum==carnum) /*卡号存在,进入下一循环*/

{

n=i

fclose(fp)

printf("请输入你要还的书的名字\n")

scanf("%s",lendbook)

fp=fopen("record.txt","r")

for(i=0fread(&student[i],sizeof(struct student),1,fp)!=0i++) /*判断是否借阅了输入的书*/

{

if(strcmp(student[i].lendbook,lendbook)==0) /*借阅了该书,进入下一循环,否则出错显示*/

{

fclose(fp)

fp=fopen("record.txt","r")

fp2=fopen("bookl.txt","w")

for(i=0fread(&student[i],sizeof(struct student),1,fp)!=0i++)

{

if(strcmp(student[i].lendbook,lendbook)==0)

{

continue/*删除还掉的书的借书记录*/

}

fwrite(&student[i],sizeof(struct student),1,fp2)/*写入原来没还的书的记录*/

}

fclose(fp)

fclose(fp2)

fp=fopen("record.txt","w")

fp2=fopen("bookl.txt","r")

for(i=0fread(&student[i],sizeof(struct student),1,fp2)!=0i++)

{

fwrite(&student[i],sizeof(struct student),1,fp)/*将借书记录信息写回*/

}

fclose(fp)

fclose(fp2)

fopen("bookl.txt","w")/*清临时文件的记录*/

fclose(fp2)

fp=fopen("book.txt","r")

fp2=fopen("bookl.txt","w")

for(i=0fread(&book[i],sizeof(struct book),1,fp)!=0i++) /*将书的记录写入临时文件,防止因为修改信息破坏以前的记录*/