libarary C语言.docx
- 文档编号:29556473
- 上传时间:2023-07-24
- 格式:DOCX
- 页数:29
- 大小:55.32KB
libarary C语言.docx
《libarary C语言.docx》由会员分享,可在线阅读,更多相关《libarary C语言.docx(29页珍藏版)》请在冰豆网上搜索。
libararyC语言
#include"stdio.h"/*I/O函数*/
#include"stdlib.h"/*其它说明*/
#include"string.h"/*字符串函数*/
#include"conio.h"/*屏幕操作函数*/
#include"mem.h"/*内存操作函数*/
#include"ctype.h"/*字符操作函数*/
#include"alloc.h"/*动态地址分配函数*/
typedefstructz1/*定义数据结构*/
{
charno[20];
charbookname[20];
intprice;
charwriter[20];
charsituation[11];
structz1*next;
}library;
typedefstructz2
{charno[11];
charstudentname[20];
charsex[5];
structz1book;
charBorR[6];
structz2*next;
}student;
/*以下是函数原型*/
library*init();/*初始化函数*/
library*create();/*创建链表*/
student*studentcreate();
library*delete(library*h);/*删除记录*/
voidprint(library*h);/*显示所有记录*/
voidstudentprint(student*h);
voidsearch(library*h);/*查找*/
voidstudentserach(student*h);
voidsave(library*h);/*保存*/
voidstudentsave(student*h);
library*load();/*读入记录*/
student*studentload();
library*insert(library*h);/*插入记录*/
voidappend();/*追加记录*/
voidcopy();/*复制文件*/
library*sort(library*h);/*排序*/
voidstudentBorR();
intmenu_select();/*菜单函数*/
intstudentmenu_select();
library*changesituation(library*h);
/******主函数开始*******/
main()
{
inti;
library*head;/*链表定义头指针*/
head=init();/*初始化链表*/
clrscr();/*清屏*/
for(;;)/*无限循环*/
{
switch(menu_select())/*调用主菜单函数,返回值整数作开关语句的条件*/
{/*值不同,执行的函数不同,break不能省略*/
case0:
head=init();break;/*执行初始化*/
case1:
head=create();break;/*创建链表*/
case2:
head=delete(head);break;/*删除记录*/
case3:
print(head);break;/*显示全部记录*/
case4:
search(head);break;/*查找记录*/
case5:
save(head);break;/*保存文件*/
case6:
head=load();break;/*读文件*/
case7:
head=insert(head);break;/*插入记录*/
case8:
copy();break;/*复制文件*/
case9:
head=sort(head);break;/*排序*/
case10:
append();break;/*追加记录*/
case11:
studentBorR();break;
case12:
head=changesituation(head);break;
case13:
exit(0);/*如菜单返回值为13程序结束*/
}
}
}
/*菜单函数,返回值为整数*/
menu_select()
{
char*menu[]={"***************MENU***************",/*定义菜单字符串数组*/
"0.initlist",/*初始化*/
"1.Enterlist",/*输入记录*/
"2.Deletearecordfromlist",/*从表中删除记录*/
"3.printlist",/*显示单链表中所有记录*/
"4.Searchrecordonbookname",/*按照名查找记录*/
"5.Savethefile",/*将单链表中记录保存到文件中*/
"6.Loadthefile",/*从文件中读入记录*/
"7.insertrecordtolist",/*插入记录到表中*/
"8.copythefiletonewfile",/*复制文件*/
"9.sorttomakenewfile",/*排序*/
"10.appendrecordtofile",/*追加记录到文件中*/
"11.BorroworReturnbook",
"12.Changesituation",
"13.Quit"};/*退出*/
chars[3];/*以字符形式保存选择号*/
intc,i;/*定义整形变量*/
gotoxy(1,25);/*移动光标*/
printf("pressanykeyentermenu......\n");/*压任一键进入主菜单*/
getch();/*输入任一键*/
clrscr();/*清屏幕*/
gotoxy(1,1);/*移动光标*/
textcolor(YELLOW);/*设置文本显示颜色为黄色*/
textbackground(BLUE);/*设置背景颜色为蓝色*/
gotoxy(10,2);/*移动光标*/
putch(0xc9);/*输出左上角边框┏*/
for(i=1;i<44;i++)
putch(0xcd);/*输出上边框水平线*/
putch(0xbb);/*输出右上角边框┓*/
for(i=3;i<20;i++)
{
gotoxy(10,i);putch(0xba);/*输出左垂直线*/
gotoxy(54,i);putch(0xba);
}/*输出右垂直线*/
gotoxy(10,20);putch(0xc8);/*输出左上角边框┗*/
for(i=1;i<44;i++)
putch(0xcd);/*输出下边框水平线*/
putch(0xbc);/*输出右下角边框┛*/
window(11,3,53,19);/*制作显示菜单的窗口,大小根据菜单条数设计*/
clrscr();/*清屏*/
for(i=0;i<16;i++)/*输出主菜单数组*/
{
gotoxy(10,i+1);
cprintf("%s",menu[i]);
}
textbackground(BLACK);/*设置背景颜色为黑色*/
window(1,1,80,25);/*恢复原窗口大小*/
gotoxy(10,21);/*移动光标*/
do{
printf("\nEnteryouchoice(0~13):
");/*在菜单窗口外显示提示信息*/
scanf("%s",s);/*输入选择项*/
c=atoi(s);/*将输入的字符串转化为整形数*/
}while(c<0||c>13);/*选择项不在0~13之间重输*/
returnc;/*返回选择项,主程序根据该数调用相应的函数*/
}
studentmenu_select()
{char*studentmenu[]={"************student************",
"0.Enterlist",
"1.Studentprintlist",
"2.Savethefile",
"3.Loadthefile",
"4.Searchrecordonstudentname",
"5.return"};
chars[3];
intc,i;
gotoxy(1,25);
printf("pressanykeyentermenu....\n");
getch();
clrscr();
gotoxy(1,1);
textcolor(BLACK);
textbackground(RED);
gotoxy(10,2);
putch(0xc9);
for(i=1;i<44;i++)putch(0xcd);
putch(0xbb);
for(i=3;i<20;i++)
{gotoxy(10,i);putch(0xba);
gotoxy(54,i);putch(0xba);
}
gotoxy(10,20);putch(0xc8);
for(i=1;i<44;i++)putch(0xcd);
putch(0xcd);
window(11,3,53,19);
clrscr();
for(i=0;i<16;i++)
{gotoxy(10,i+1);
cprintf("%s",studentmenu[i]);
}
textbackground(YELLOW);
window(1,1,80,25);
gotoxy(10,21);
do{printf("\nEnteryourchoice(0~5):
");
scanf("%s",s);
c=atoi(s);
}while(c<0||c>5);
returnc;
}
library*init()
{
returnNULL;
}
/*创建链表*/
library*create()
{
ints;
library*h=NULL,*info;/*library指向结构体的指针*/
for(;;)
{
info=(library*)malloc(sizeof(library));/*申请空间*/
if(!
info)/*如果指针info为空*/
{
printf("\noutofmemory");/*输出内存溢出*/
returnNULL;/*返回空指针*/
}
inputs("enterno:
",info->no,20);/*输入学号并校验*/
if(info->no[0]=='@')break;/*如果学号首字符为@则结束输入*/
inputs("enterbookname:
",info->bookname,20);/*输入名,并进行校验*/
printf("enterprice:
");/*提示开始输入*/
scanf("%d",&info->price);
inputs("enterwriter:
",info->writer,20);
inputs("entersituation:
",info->situation,11);
info->next=h;/*将头结点做为新输入结点的后继结点*/
h=info;/*新输入结点为新的头结点*/
}
return(h);/*返回头指针*/
}
student*studentcreate()
{inti,s;
student*h=NULL,*info;
for(;;)
{info=(student*)malloc(sizeof(student));
if(!
info)
{printf("noutofmemory");
returnNULL;
}
inputs("enterno:
",info->no,11);
if(info->no[0]=='@')break;
inputs("enterstudentname:
",info->studentname,20);
inputs("entersex:
",info->sex,5);
inputs("enterbookname:
",info->book.bookname,20);
inputs("enterBorR:
",info->BorR,6);
info->next=h;
h=info;
}
printf("---------------Don'tforgetchangesituation!
!
!
!
--------------\n");
return(h);
}
/*输入字符串,并进行长度验证*/
inputs(char*prompt,char*s,intcount)
{
charp[255];
do{
printf(prompt);/*显示提示信息*/
scanf("%s",p);/*输入字符串*/
if(strlen(p)>count)printf("\ntoolong!
\n");/*进行长度校验,超过count值重输入*/
}while(strlen(p)>count);
strcpy(s,p);/*将输入的字符串拷贝到字符串s中*/
}
/*输出链表中结点信息*/
voidprint(library*h)
{
inti=0;/*统计记录条数*/
library*p;/*移动指针*/
clrscr();/*清屏*/
p=h;/*初值为头指针*/
printf("\n\n\n****************************book*************************************\n");
printf("|rec|nO|bookname|price|writer|situation|\n");
printf("|---|----------|-----------------|-------|------------|-----------|\n");
while(p!
=NULL)
{
i++;
printf("|%3d|%-10s|%-17s|%7d|%-12s|%-11s|\n",i,p->no,p->bookname,p->price,p->writer,
p->situation);
p=p->next;
}
printf("**********************************end*********************************\n");
}
voidstudentprint(student*h)
{inti=0;
student*p;
clrscr();
p=h;
printf("\n\n\n**************************student*********************************\n");
printf("|rec|no|studentname|sex|bookname|BorR|\n");
printf("|---|----------|---------------|-----|----------------|------|\n");
while(p!
=NULL)
{i++;
printf("|%3d|%-10s|%-15s|%-5s|%-16s|%-6s|\n",i,p->no,p->studentname,
p->sex,p->book.bookname,p->BorR);
p=p->next;
}
printf("*******************************end*******************************\n");
printf("--------------Don'tforgetchangesituation!
!
----------------\n");
}
/*删除记录*/
library*delete(library*h)
{
library*p,*q;/*p为查找到要删除的结点指针,q为其前驱指针*/
chars[20];/*存放/
clrscr();/*清屏*/
printf("pleasedeletedbookname\n");/*显示提示信息*/
scanf("%s",s);/*输入要删除记录的书名*/
q=p=h;/*给q和p赋初值头指针*/
while(strcmp(p->bookname,s)&&p!
=NULL)/*当记录的书名不是要找的,或指针不为空时*/
{
q=p;/*将p指针值赋给q作为p的前驱指针*/
p=p->next;/*将p指针指向下一条记录*/
}
if(p==NULL)/*如果p为空,说明链表中没有该结点*/
printf("\nlistno%sbook\n",s);
else/*p不为空,显示找到的记录信息*/
{
printf("*****************************havefound***************************\n");
printf("|no|bookname|price|writer|situation|\n");
printf("|----------|-----------------|-------|------------|-----------|\n");
printf("|%-10s|%-17s|%7d|%-12s|%-11s|\n",p->no,
p->bookname,p->price,p->writer,p->situation);
printf("********************************end*******************************\n");
getch();/*压任一键后,开始删除*/
if(p==h)/*如果p==h,说明被删结点是头结点*/
h=p->next;/*修改头指针指向下一条记录*/
else
q->next=p->next;/*不是头指针,将p的后继结点作为q的后继结点*/
free(p);/*释放p所指结点空间*/
printf("\nhavedeletedNo%sbook\n",s);
printf("Don'tforgetsave\n");/*提示删除后不要忘记保存文件*/
}
return(h);/*返回头指针*/
}
/*查找记录*/
voidsearch(library*h)
{
library*p;/*移动指针*/
chars[20];/*存放名的字符数组*/
clrscr();/*清屏幕*/
printf("pleaseenterbooknameforsearch\n");
scanf("%s",s);/*输入姓名*/
p=h;/*将头指针赋给p*/
while(strcmp(p->bookname,s)&&p!
=NULL)/*当记录的姓名不是要找的,或指针不为空时*/
p=p->next;/*移动指针,指向下一结点*/
if(p==NULL)/*如果指针为空*/
printf("\nlistno%sbook\n",s);/*显示没有该学生*/
else/*显示找到的记录信息*/
{
printf("\n\n*****************************havefound***************************\n");
printf("|nO|bookname|price|writer|situation|\n");
printf("|----------|-----------------|-------|------------|-----------|\n");
printf("|%-10s|%-17s|%7d|%-12s|%-11s|\n",p->no,
p->bookname,p->price,p->writer,p->situation);
printf("********************************end*******************************\n");
}
}
voidstudentsearch(student*h)
{student*p;
chars[20];
clrscr();
printf("Pleaseenterstudentnameforsearch\n");
scanf("%s",s);
p=h;
while(strcmp(p->studentname,s)&&p!
=NULL)
p=p->next;
if(p==NULL)
printf("nlistno%sstudent\n",s);
else
{
printf("\n\n**************************havefound***************************\n");
printf("|no|studentname|sex|bookname|BorR|\n");
printf("|----------|---------------|-----|----------------|------|\n");
printf("|%-10s|%-15s|%5c|%-16s|%-6s|\n",p->no,p->studentname,p->sex,
p->book.bookname,p->BorR);
printf("*******************************end********************************\n");
printf("\n\n-------IfyoucometoReturnbook!
!
------------\n");
printf("--------Pleasefill'R'!
-----------
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- libarary C语言 语言