借书的限制:教师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++) /*将书的记录写入临时文件,防止因为修改信息破坏以前的记录*/