⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 common.c

📁 图书借阅管理程序v1.2
💻 C
📖 第 1 页 / 共 2 页
字号:
         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 + -