📄 common.c
字号:
else
{
sprintf(exchange,"%08ld %-6s %3d %s",curp->person.borrowernum,curp->person.borrower,beyonddays,curp->person.bookname);
InsertCommonNode(count++,exchange,searchhead);
curp=curp->next;
}
}
}
strcpy(searchhead->string,"借书超期者查询结果\r\n 借阅号码 姓名 超期 书名");
return(searchhead);
}
/***查找书链表中的书名中有string关键字的书的节点***/
struct commonstr* SearchBookName(struct dnode* bookhead,char* string)
{
struct dnode* curp=bookhead->next;
struct commonstr* searchhead=InitCommonList();
char* lib=(char*)malloc(80);
char exchange[80];
int count=1;
while(curp!=NULL)
{
lib=strstr(curp->book.bookname,string);
if(lib==NULL)
curp=curp->next;
else
{
sprintf(exchange,"%-3d %4s %s",curp->book.booknum,curp->book.borrow_out,curp->book.bookname);
InsertCommonNode(count++,exchange,searchhead);
curp=curp->next;
}
}
strcpy(searchhead->string,"按书名关键字查询结果\r\n 书号 借出? 图书名称");
return(searchhead);
}
/***************************本程序专门用于输入查找的关键书名************************/
char* InputSearchName()
{
int key,count=0;
char *str;
str=(char*)malloc(51);
get: while((key=get_key())!=ENTER)
{
switch(key){
case BACK:
if(count==0) continue; /*当删除完时*/
cprintf("\b");
putch('\0');
cprintf("\b");
count--;
if(count<=0) count=0;
break;
case ESC: return NULL;
/*case SPACE:continue;*/
case '\0':
case RIGHT:
case LEFT:
case DOWN:
case PGUP:
case PGDOWN:
case HOME:
case END:
case UP:break;
default:if(count>49) continue; /*当输入太多时*/
putch(key);
str[count]=key;
count++;
}
}
str[count]='\0';
if(str[0]=='\0') goto get;
return(str);
}
/**选择查找命令后第一个出现的窗口**/
int FindWindow(struct dnode* bookhead,struct personnode* personhead)
{
struct text_info ti;
struct personnode* curp=personhead->next;
struct dnode* curbookp=bookhead->next;
char block[4*41*11];
char haveCD[4];
char *bookkeywords=(char*)malloc(80);
char buffer[100]; /*用于临时存放一时信息*/
char yorn;
int key,key2,key3;
int beyonddays; /*超期天数*/
long personnum;
char* information,*pathname;
FILE *fp;
struct commonstr* resultstr=InitCommonList();
information=(char*)malloc(200);
pathname=(char*)malloc(200);
light_mouse(OFF);
gettextinfo(&ti);
gettext(20,8,61,19,&block);
window(25,9,55,19);
textbackground(BLACK);
clrscr();
window(24,8,54,18);
textbackground(CYAN);
textcolor(BLACK);
clrscr();
gotoxy(12,1);
cprintf("查询\r\n");
cprintf(" 1 按书名关键字查询\r\n"); /*按书的关键字进行查找*/
cprintf(" 2 查询已借出去的书\r\n");/*按书是否被借出查找*/
cprintf(" 3 查询借阅超期的情况\r\n");/*按是否超期查找*/
cprintf(" 4 查看单个人员信息\r\n");/*查看人员信息*/
cprintf(" 5 导出数据到文件\r\n"); /*把所有借书的人的情况或所有借书超期的人的资料送入一个文件中*/
gotoxy(2,10);
cputs("请选择数字或单击:");
window(44,17,46,17);
textcolor(YELLOW);
textbackground(BLACK);
clrscr();
light_mouse(ON);
key=get_key();
switch(key){
case LEFT_BUTTON:
if((mx/8>=24&&mx/8<=40)&&(my/8==8))
goto choose1;
else if((mx/8>=24&&mx/8<=40)&&(my/8==9))
goto choose2;
else if((mx/8>=24&&mx/8<=40)&&(my/8==10))
goto choose3;
else if((mx/8>=24&&mx/8<=40)&&(my/8==11))
goto choose4;
else if((mx/8>=24&&mx/8<=40)&&(my/8==12))
goto choose5;
else break;
case '1':
choose1:
light_mouse(OFF);
window(20,12,60,14);
textbackground(YELLOW);
textcolor(WHITE);
clrscr();
cprintf(" 请输入书名或书名的关键字:");
window(21,13,59,13);
textbackground(BLACK);
clrscr();
light_mouse(ON);
bookkeywords=InputSearchName();
if(bookkeywords==NULL) break;
resultstr=SearchBookName(bookhead,bookkeywords);
CommonWin(resultstr);
ClearCommonList(resultstr);
break;
case '2':
choose2:
/* light_mouse(OFF);
window(20,12,60,14);
textbackground(YELLOW);
textcolor(WHITE);
clrscr();
cprintf(" 查询借出的书还没借出的书(Y/N):");
window(21,13,59,13);
textbackground(BLACK);
clrscr();
light_mouse(ON);
key2=get_key();
switch(key2){
case 'y':
case 'Y':key3='Y';break;
default: key3='N';break;
}
if(key2==ESC) break;
*/
resultstr=SearchBookYN(bookhead,'Y');
CommonWin(resultstr);
ClearCommonList(resultstr);
break;
case '3':
choose3: resultstr=SearchPersonBeyond(personhead,bookhead);
CommonWin(resultstr);
ClearCommonList(resultstr);
break;
case '4':
choose4:
light_mouse(OFF);
window(20,12,60,14);
textbackground(YELLOW);
textcolor(WHITE);
clrscr();
cprintf(" 请输入借书者的号码:");
window(21,13,59,13);
textbackground(BLACK);
clrscr();
light_mouse(ON);
personnum=InputBorrowerNum();
if(personnum==CANCEL) break;
resultstr=FindPersonInfo(personnum,personhead,bookhead);
CommonWin(resultstr);
ClearCommonList(resultstr);
break;
case '5':
choose5:
light_mouse(OFF);
window(25,9,55,19);
textbackground(BLACK);
clrscr();
window(24,8,54,18);
textbackground(CYAN);
textcolor(WHITE);
clrscr();
cprintf(" 选择导出方式\r\n");
cprintf(" 1 只导出借书超期者资料\r\n");
cprintf(" 2 只导出巳借书者的资料\r\n");
cprintf(" 3 导出所有图书资料\r\n");
cprintf(" 4 导出所有借书者资料\r\n\r\n\r\n");
cprintf(" 请选择:");
light_mouse(ON);
key=get_key();
if(chdir("data"))
mkdir("data");
switch(key){
case LEFT_BUTTON:
if((mx/8>=25&&mx/8<=40)&&(my/8==8))
goto choose11;
else if((mx/8>=25&&mx/8<=40)&&(my/8==9))
goto choose12;
else if((mx/8>=25&&mx/8<=40)&&(my/8==10))
goto choose13;
else if((mx/8>=25&&mx/8<=40)&&(my/8==11))
goto choose14;
else break;
case '1':fp=fopen("超期者.doc","wb+");
choose11:fprintf(fp," 所有借书超期者的资料\r\n");
while(curp!=NULL)
{
if(curp->person.booknum==0) curp=curp->next;
else
{
beyonddays=beyondday(curp->person.borrowdate,bookhead);
if((beyonddays<=0)||(beyonddays>400)) curp=curp->next;
else
{fprintf(fp,"%08ld %-6s %9s %s\r\n",curp->person.borrowernum,curp->person.borrower,
curp->person.borrowdate,curp->person.bookname);
curp=curp->next;
}
}
}
fclose(fp);
getcwd(pathname,190);
sprintf(information,"数据已成功导出到%s\\超期者.doc 中.",pathname);
MessageBox(10,10,information);
break;
case '2':
choose12: fp=fopen("借书人.doc","wb+");
fprintf(fp," 所有借书的人的资料\r\n");
while(curp!=NULL)
{if(curp->person.booknum)
{fprintf(fp,"%08ld %-6s %9s %s\r\n",curp->person.borrowernum,curp->person.borrower,
curp->person.borrowdate,curp->person.bookname);
curp=curp->next;
}
else curp=curp->next;
}
fclose(fp);
getcwd(pathname,190);
sprintf(information,"数据已成功导出到%s\\借书人.doc 中.",pathname);
MessageBox(10,10,information);
break;
case '3':
choose13: fp=fopen("图书资料.doc","wb+");
fprintf(fp," 所有书耤资料\r\n");
while(curbookp!=NULL)
{
if(curbookp->book.haveCD[0]=='N') strcpy(haveCD,"无");
else strcpy(haveCD,"有");
fprintf(fp,"%-4d %7.1f %s %s\r\n",curbookp->book.booknum,curbookp->book.bookprice,
haveCD,curbookp->book.bookname);
curbookp=curbookp->next;
}
fclose(fp);
getcwd(pathname,190);
sprintf(information,"数据已成功导出到%s\\图书资料.doc 中.",pathname);
MessageBox(10,10,information);
break;
case '4':
choose14: fp=fopen("人员资料.doc","wb+");
fprintf(fp," 所有人员资料\r\n");
while(curp!=NULL)
{
if(curp->last->person.borrowernum==curp->person.borrowernum) curp=curp->next;
else
{fprintf(fp,"%08ld %-6s\r\n",curp->person.borrowernum,curp->person.borrower);
curp=curp->next;
}
}
fclose(fp);
getcwd(pathname,190);
sprintf(information,"数据已成功导出到%s\\人员资料.doc 中.",pathname);
MessageBox(10,10,information);
break;
case ESC:break;
default:MessageBox(20,10,"选择错误");break;
}
break;
case RIGHT_BUTTON:
case ESC:break;
default:MessageBox(20,10,"选择错误");break;
}
chdir(curpath); /***返回程序工作目录**/
myputtext(20,8,61,19,block);
window(ti.winleft,ti.wintop,ti.winright,ti.winbottom);
textattr(ti.attribute);
gotoxy(ti.curx,ti.cury);
}
/**帮助信息**/
struct commonstr* HelpInfo()
{
struct commonstr* helphead=InitCommonList();
int i;
int count=1;
char *helpmessage[]={" 图书借阅管理 v1.2",
" ",
" 程序设计:大连民族学院创新中心 吕进华",
" Email:nujinhua@163.com",
" 特别感谢 付鹤、贺舒清、吴进 提供的帮助。",
" 如果你对本程序有好的意见或建议的话,欢迎来信与我联系",
" ",
"一般功能简介:",
" ",
"F1-帮助 如果在使用过程中遇到什么困难,按F1则显示本帮助信息。",
" ",
"F2-密码 修改登录密码,根据提示正确输入原密码以后,输入两次新密码则",
" 密码修改成功。",
" ",
"F4-查询 按下此键后,将出现一个选择菜单,你可以选择你要的查询方式:",
" 1.按关键字查询:可以输入书名的部分或全部名称查找你想要的书",
" 2.查询借出的书:可以查看所有已经借出去的书的情况。",
" 3.超期情况查询:查看所有借书超过时间的人的详细情况。",
" 4.查看人员信息:选择该项后,只要输入成员号码,就可以查看他",
" 借书的详细情况。",
" 5.导出数据到文件:此项可以把一些有用的信息转换成Word文档保",
" 存到当前目录DATA下,这些内容包括借书超期者名单,借书者",
" 名单等,这些文件可以在Word中显示并打印出来,以备用。",
" ",
"F5-图书管理窗口和人员管理窗口相互切换。",
" ",
"F6-修改 此功能用于修改最长借书时间,比如以前是一个月,按该键后,就",
" 提示你最长借书时间是30天,紧接着就可以输入新的限制时间了。",
" ",
"F7-数量 用于修改个人借书最大数量。",
" ",
"F8-借书 按下此键即进入借书的过程。屏幕首先提示你输入借书者的号码,",
" 输入借书者的号码以后,如果没有错,将会进入一个新的窗口,如",
" 果出错,则提示你以后结束借书过程。在正确输入借书者号码的情",
" 况下,新窗口分两个部分,上部分的小窗口用于输入想借的书号,",
" 下面的窗口用于显示此借书者以往的借书情况,输入书号后,如果",
" 此书存在而且没有被人借走那借阅就成功了,否则不成功。",
" 注意:如果下面的窗口中的文字显示为白色,说明此人借书超期。",
" ",
"F9-还书 选择该项功能后,会提示你输入书的号码,如果没错则提示还书成",
" 功,否则提示错误并返回。",
" ",
"END-刷新 有时候当修改某些内容以后,会发现屏幕上的内容并没有相应的改",
" 变,此时按一下END键就会刷新屏幕内容,使之显示正确的结果。",
" ",
"INSERT-插入 ",
" 这是添加信息用的,分两种情况:当你在图书管理窗口下按此键时",
" 就进行图书的添加;当在人员管理窗口下按时就进行人员的添加。",
" ",
"DEL-删除 用来删除人或书的,也分两种情况:当在图书管理窗口下时进行图",
" 书的删除;当在人员管理窗口下按时进行借书人的删除。",
" 注意:在删除书的时候要先看一看书有没有被借出去,如果有的话",
" 最好不要删除。同样,在删除人员的时候如果他还有书没有",
" 还,最好是在他还书以后再删除。",
"CTRL+X-退出。",
" ",
"特殊功能简介:",
" 本软件具有数据自动备份的功能,它将根据机器的日期每天备份一次数",
" 据存放在当前文件夹的“备份”文件夹下,当进行了某种误操作或数",
" 据突然丢失时,可以回到Windows操作系统下用备份的数据还原被破坏",
" 的数据。",
" ",
" 本程序具有简单的输入保护功能,比如当你在输入图书价格的时候就",
" 不能输入除数字以外的其它字母或符号。",
" 本程序支持简单的鼠标操作,当你需要某项功能的时候可直接点击。",
" ",
};
strcpy(helphead->string," 系统帮助\r\n 四个方向键移动光标,ESC返回");
for(i=0;i<65;i++)
InsertCommonNode(count++,helpmessage[i],helphead);
return (helphead);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -