libarary C语言.docx

上传人:b****8 文档编号:29556473 上传时间:2023-07-24 格式:DOCX 页数:29 大小:55.32KB
下载 相关 举报
libarary C语言.docx_第1页
第1页 / 共29页
libarary C语言.docx_第2页
第2页 / 共29页
libarary C语言.docx_第3页
第3页 / 共29页
libarary C语言.docx_第4页
第4页 / 共29页
libarary C语言.docx_第5页
第5页 / 共29页
点击查看更多>>
下载资源
资源描述

libarary C语言.docx

《libarary C语言.docx》由会员分享,可在线阅读,更多相关《libarary C语言.docx(29页珍藏版)》请在冰豆网上搜索。

libarary C语言.docx

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'!

-----------

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 考试认证 > 公务员考试

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1