简单图书管理系统

来源:互联网 发布:深圳软件开发外包 编辑:程序博客网 时间:2024/05/16 14:34

1.DOS界面的颜色设置(背景、字体颜色)

color [attr]

下面是颜色代码:(如 color fc 为亮白色产生亮红色,第一个背景,第二个前景)

0 = 黑色 8 = 灰色
1 = 蓝色 9 = 淡蓝色
2 = 绿色 A = 淡绿色
3 = 湖蓝色 B = 淡浅绿色
4 = 红色 C = 淡红色
5 = 紫色 D = 淡紫色
6 = 黄色 E = 淡黄色
7 = 白色 F = 亮白色
dos只能显示这几种基础颜色并不能自己定制其他的颜色


2.字符串的比较(用于密码验证等)

strcmp 是一个比较字符串的函数 原型:extern int strcmp(char *s1,char * s2); 用法:#include <string.h>  功能:比较字符串s1和

s2。 说明: 当s1<s2时,返回值<0 当s1=s2时,返回值=0 当s1>s2时,返回值>0


3.C语言的文件操作

定义一个代表文件的符号(指针变量)这样的形式FILE *fp

打开文件的语句是

fopen(文件位置,打开模式);

文件位置好理解,就是文件所在的位置,例如D://test.txt

打开模式有几种,

r(read): 读

w(write): 写

a(append): 追加

t(text): 文本文件,可省略不写

b(banary): 二进制文件

+: 读和写

一般是rt+,也可以写成r+,和w+,就是读和写,能保留原来的内容。所以打开C盘下my目录中的文件c:\my\test.txt的语句是

fp=fopen("c://my/test.txt","r+")。注意文件夹符号同上面的不同。



4.代码模块(验证密码、查询信息、修改信息、删除信息)


①安全验证

[csharp] view plain copy
  1. void check()  
  2. {  
  3.    char userName[5];/*用户名*/  
  4.    char userPWD[5];/*密码*/  
  5.    int i,sum;  
  6.    system("color 0B");  
  7.    for(i = 1; i < 4; i++)  
  8.    {  
  9.       /*用户名和密码均为abcde;*/  
  10.         printf("                         (用户名和密码均为abcde)\n\n");  
  11.         printf("\n       请输入您的用户名:");  
  12.         gets(userName);  
  13.           
  14.         printf("\n       请输入您的密码:");  
  15.         gets(userPWD);  
  16.           
  17.         if ((strcmp(userName,"abcde")==0) && (strcmp(userPWD,"abcde")==0))/*验证用户名和密码*/  
  18.         {  
  19.             printf("\n                      *用户名和密码正确,显示主菜单*");  
  20.             return;  
  21.         }  
  22.         else  
  23.         {  
  24.             if (i < 3)  
  25.             {  
  26.                 printf("用户名或密码错误,提示用户重新输入");  
  27.                 printf("用户名或密码错误,请重新输入!");  
  28.             }  
  29.             else  
  30.             {  
  31.                 printf("连续3次输错用户名或密码,退出系统。");  
  32.                 printf("您已连续3次将用户名或密码输错,系统将退出!");  
  33.                 exit(1);   
  34.             }  
  35.         }  
  36.    }  
  37. }  



②查询图书信息

[csharp] view plain copy
  1. void inquire(STUDENTS stu[])   
  2.   { int i;  
  3.     char name[20];  
  4.     system("cls");  
  5.     printf("     \n\n请输入您要查找的图书的书名:");  
  6.     scanf("%s",&name);  
  7.     for(i=0;i<k;i++)  
  8.       if(strcmp(name,stu[i].name)==0)  
  9.          printf("\n\n\n编号:%d,书名:%s,作者:%s,出版社:%s,价格: %.2f,数量:%d\n",stu[i].num,stu[i].name,  
  10.      stu[i].author,stu[i].press,stu[i].price,stu[i].quantity);  
  11.     printf("按任意键加回车返回主菜单!");  
  12.     scanf("%d",&i);  
  13.     getchar();  
  14.   }  

原理是通过循环,将所有stu数组中的学号stu[i].num同输入要查询的学号num对比,如果一样,就printf显示。


③修改图书信息

函数是change(STUDENTS stu[])

[csharp] view plain copy
  1. void change(STUDENTS stu[])  
  2.   {  int num,i,choice;  
  3.      system("cls");   
  4.    printf("\n\n\n      请输入您要修改的图书的编号");  
  5.      scanf("%d",&num);  
  6.      for(i=0;i<k;i++)  
  7.      { if(num==stu[i].num)  
  8.          printf("\n编号:%d,书名:%s,作者:%s,出版社:%s,价格: %.2f,数量:%d\n",stu[i].num,stu[i].name,  
  9.      stu[i].author,stu[i].press,stu[i].price,stu[i].quantity);  
  10.   
  11.      printf("\n\n\n     ********请输入您想要修改的数据********\n\n");  
  12.      printf("                1. 编号\n\n");  
  13.      printf("                2. 书名\n\n");  
  14.      printf("                3. 作者\n\n");  
  15.      printf("                4. 出版社\n\n");  
  16.      printf("                5. 价格\n\n");  
  17.      printf("                6. 数量\n\n");  
  18.      printf("                 请选择(1-6):");  
  19.     scanf("%d",&choice);  
  20.     switch(choice)  
  21.     {case 1:{  
  22.            printf("\n   请输入你改的新编号");  
  23.              scanf("%d",&stu[i].num);   
  24.          break;  
  25.          }  
  26.      case 2:{  
  27.            printf("\n   请输入你改的新书名");  
  28.              scanf("%s",stu[i].name);   
  29.          break;  
  30.         }  
  31.      case 3:{  
  32.            printf("\n   请输入你改的新作者");  
  33.              scanf("%s",stu[i].author);   
  34.          break;  
  35.         }  
  36.      case 4:{  
  37.            printf("\n   请输入你改的新出版社");  
  38.              scanf("%s",stu[i].press);   
  39.          break;  
  40.         }  
  41.      case 5:{  
  42.            printf("\n   请输入你改的新价格");  
  43.              scanf("%f",&stu[i].price);   
  44.          break;  
  45.      case 6:{  
  46.            printf("\n   请输入你改的新数量");  
  47.              scanf("%d",&stu[i].quantity);   
  48.          break;  
  49.         }      
  50.         }  
  51.     }  

原理是首先定位,然后输入新的值替换以前的值。


④删除图书信息

函数是 void deletel(STUDENTS stu[])

主要原理是

[csharp] view plain copy
  1. printf("请输入图书名称:");  
  2. scanf("%s",Stuname2);  

让用户输入图书的名称,然后从头开始比对每个stu变量中的名称

[csharp] view plain copy
  1. if(strcmp(stu[i].name,Stuname2)==0)     
  2.      for(j=0;j<20;j++)  
  3.        stu[i].name[j]=stu[i+1].name[j];  
  4.      k--;  

如果找到名字相符的话,就将下一个名字覆盖前一个名字



以下是完整的主程序代码:

[csharp] view plain copy
  1. #include"stdio.h"  
  2. #include"stdlib.h"  
  3. #include"string.h"  
  4. #include"conio.h"  
  5. #define Pquantity 3  
  6. #define MAX 1000  
  7. #define N 5  
  8. int k=0;  
  9.   /*结构体类型*/  
  10. typedef struct    
  11. {   int num;/*编号*/  
  12.     char name[20];/*书名*/  
  13.     char author[20];/*作者*/  
  14.     char press[20];/*出版社*/  
  15.     float price;/*价格*/  
  16.     int quantity;/*数量*/  
  17.       
  18.       
  19. }STUDENTS;  
  20.   
  21. int read_file(STUDENTS stu[])  
  22. { FILE *fp;  
  23.     int i=0;  
  24.   if((fp=fopen("stu.txt","rt"))==NULL)  
  25.   {printf("\n\n—————库存文件不存在!请创");  
  26.    return 0;  
  27.   }  
  28.   while(feof(fp)!=1)  
  29.     {  
  30.   fread(&stu[i],sizeof(STUDENTS),1,fp);  
  31.   if(stu[i].num==0)  
  32.     break;  
  33.   else  
  34.     i++;  
  35.   }  
  36.   fclose(fp);  
  37.   return i;  
  38. }  
  39. void save_file(STUDENTS stu[],int sum)  
  40. {FILE*fp;  
  41.  int i;  
  42.  if((fp=fopen("stu.txt","wb"))==NULL)  
  43.  {printf("写文件错误!\n");  
  44.   return;  
  45.  }  
  46.    for(i=0;i<sum;i++)  
  47.      if(fwrite(&stu[i],sizeof(STUDENTS),1,fp)!=1)  
  48.        printf("写文件错误!\n");  
  49.      fclose(fp);  
  50. }  
  51.   
  52.   
  53. /*创建图书信息*/  
  54. int input(STUDENTS stu[])  
  55. {  int i,x;  
  56.    for(i=0;i<1000;i++)  
  57.    {  
  58.     system("cls");    
  59.     printf("\n\n                 录入图书信息  (最多%d本)\n",MAX);  
  60.     printf("               ----------------------------\n");  
  61.      
  62.         printf("\n                     第%d本图书",k+1);  
  63.         printf("\n 请输入图书的编号:");  
  64.         scanf("%d",&stu[k].num);  
  65.         printf("\n 请输入图书的书名:");  
  66.         scanf("%s",stu[k].name);   
  67.         printf("\n 请输入图书的作者:");  
  68.         scanf("%s",stu[k].author);  
  69.         printf("\n 请输入图书的出版社:");  
  70.         scanf("%s",stu[k].press);   
  71.         printf("\n 请输入图书的价格:");  
  72.         scanf("%f",&stu[k++].price);  
  73.         printf("\n 请输入图书的数量:");     
  74.         scanf("%d",&stu[i].quantity);   
  75.         printf("\n 请按1键返回菜单或按0键继续创建");  
  76.         scanf("%d",&x);  
  77.     if(x)  
  78.       break;  
  79.    }  
  80.         
  81.        return k;  
  82. }  
  83.   
  84.   
  85. /*删除图书信息*/  
  86. void deletel(STUDENTS stu[])  
  87.   { system("cls");   
  88.    char Stuname2[20];  
  89.    int i,j;  
  90.    printf("请输入图书书名:");  
  91.    scanf("%s",Stuname2);  
  92.    printf("\n");  
  93.    for(i=0;i<k;i++)  
  94.    if(strcmp(stu[i].name,Stuname2)==0)     
  95.      for(j=0;j<20;j++)  
  96.        stu[i].name[j]=stu[i+1].name[j];  
  97.    k--;  
  98.     
  99.     
  100.    printf("删除成功\n");  
  101.    printf("按任意键加回车返回主菜单!");  
  102.    scanf("%d",&i);  
  103.    getchar();  
  104. }  
  105.   
  106. /*打印图书信息*/                                                                                                                                                                                                                                                          
  107. void output(STUDENTS stu[])  
  108. {  system("cls");  
  109.    int i;  
  110.    for(i=0;i<k;i++)    
  111.      printf("编号:%d,书名:%s,作者:%s,出版社:%s,价格: %.2f,数量:%d\n",stu[i].num,stu[i].name,  
  112.       stu[i].author,stu[i].press,stu[i].price,stu[i].quantity);  
  113.    printf("按任意键加回车返回主菜单!");  
  114.    scanf("%d",&i);  
  115.    getchar();  
  116. }  
  117.   
  118. /*查询图书信息*/  
  119. void inquire(STUDENTS stu[])   
  120.   { int i;  
  121.     char name[20];  
  122.     system("cls");  
  123.     printf("     \n\n请输入您要查找的图书的书名:");  
  124.     scanf("%s",&name);  
  125.     for(i=0;i<k;i++)  
  126.       if(strcmp(name,stu[i].name)==0)  
  127.          printf("\n\n\n编号:%d,书名:%s,作者:%s,出版社:%s,价格: %.2f,数量:%d\n",stu[i].num,stu[i].name,  
  128.      stu[i].author,stu[i].press,stu[i].price,stu[i].quantity);  
  129.     printf("按任意键加回车返回主菜单!");  
  130.     scanf("%d",&i);  
  131.     getchar();  
  132.   }  
  133.   
  134.   
  135. /*修改图书信息*/  
  136. void change(STUDENTS stu[])  
  137.   {  int num,i,choice;  
  138.      system("cls");   
  139.    printf("\n\n\n      请输入您要修改的图书的编号");  
  140.      scanf("%d",&num);  
  141.      for(i=0;i<k;i++)  
  142.      { if(num==stu[i].num)  
  143.          printf("\n编号:%d,书名:%s,作者:%s,出版社:%s,价格: %.2f,数量:%d\n",stu[i].num,stu[i].name,  
  144.      stu[i].author,stu[i].press,stu[i].price,stu[i].quantity);  
  145.   
  146.      printf("\n\n\n     ********请输入您想要修改的数据********\n\n");  
  147.      printf("                1. 编号\n\n");  
  148.      printf("                2. 书名\n\n");  
  149.      printf("                3. 作者\n\n");  
  150.      printf("                4. 出版社\n\n");  
  151.      printf("                5. 价格\n\n");  
  152.      printf("                6. 数量\n\n");  
  153.      printf("                 请选择(1-6):");  
  154.     scanf("%d",&choice);  
  155.     switch(choice)  
  156.     {case 1:{  
  157.            printf("\n   请输入你改的新编号");  
  158.              scanf("%d",&stu[i].num);   
  159.          break;  
  160.          }  
  161.      case 2:{  
  162.            printf("\n   请输入你改的新书名");  
  163.              scanf("%s",stu[i].name);   
  164.          break;  
  165.         }  
  166.      case 3:{  
  167.            printf("\n   请输入你改的新作者");  
  168.              scanf("%s",stu[i].author);   
  169.          break;  
  170.         }  
  171.      case 4:{  
  172.            printf("\n   请输入你改的新出版社");  
  173.              scanf("%s",stu[i].press);   
  174.          break;  
  175.         }  
  176.      case 5:{  
  177.            printf("\n   请输入你改的新价格");  
  178.              scanf("%f",&stu[i].price);   
  179.          break;  
  180.      case 6:{  
  181.            printf("\n   请输入你改的新数量");  
  182.              scanf("%d",&stu[i].quantity);   
  183.          break;  
  184.         }      
  185.         }  
  186.     }  
  187.      
  188.      printf("编号:%d,书名:%s,作者:%s,出版社:%s,价格: %.2f,数量:%d\n",stu[i].num,stu[i].name,  
  189.      stu[i].author,stu[i].press,stu[i].price,stu[i].quantity);  
  190.      printf("按任意键加回车返回主菜单!");  
  191.      scanf("%d",&i);  
  192.      break;  
  193.    }  
  194. }  
  195.   
  196.   
  197. /*图书价格信息排名*/  
  198. void sort(STUDENTS stu[])  
  199.   {  int i,j,n=1,x;  
  200.      system("cls");   
  201.      int t;  
  202.      for(i=0;i<k-1;i++)  
  203.       for(j=i+1;j<k;j++)  
  204.       if(stu[i].price<stu[j].price)  
  205.       { t=stu[i].price;  
  206.         stu[i].price=stu[j].price;  
  207.         stu[j].price=t;  
  208.               t=stu[i].num;  
  209.         stu[i].num=stu[j].num;  
  210.         stu[j].num=t;  
  211.   
  212.       }  
  213.      for(i=0;i<k;i++)  
  214.     printf("排名    编号    价格\n %d       %d       %.2f\n",n++,stu[i].num,stu[i].price);  
  215.      printf("按任意键加回车返回主菜单!");  
  216.    scanf("%d",&x);  
  217.      getchar();  
  218.   }  
  219.   
  220. void pquantitydis()  
  221. {  
  222.    printf(" \n\n\n                   **********************************\n");  
  223.    printf("                   *                                *\n");  
  224.    printf("                   *                                *\n");  
  225.    printf("                   *                                *\n");  
  226.    printf("                   *     欢迎进入图书信息管理系统   *\n");  
  227.    printf("                   *                                *\n");  
  228.    printf("                   *                                *\n");  
  229.    printf("                   *                                *\n");  
  230.    printf("                   **********************************\n");  
  231.      
  232. }  
  233. void check()  
  234. {  
  235.    char userName[5];/*用户名*/  
  236.    char userPWD[5];/*密码*/  
  237.    int i,sum;  
  238.    system("color 0B");  
  239.    for(i = 1; i < 4; i++)  
  240.    {  
  241.       /*用户名和密码均为abcde;*/  
  242.         printf("                         (用户名和密码均为abcde)\n\n");  
  243.         printf("\n       请输入您的用户名:");  
  244.         gets(userName);  
  245.           
  246.         printf("\n       请输入您的密码:");  
  247.         gets(userPWD);  
  248.           
  249.         if ((strcmp(userName,"abcde")==0) && (strcmp(userPWD,"abcde")==0))/*验证用户名和密码*/  
  250.         {  
  251.             printf("\n                      *用户名和密码正确,显示主菜单*");  
  252.             return;  
  253.         }  
  254.         else  
  255.         {  
  256.             if (i < 3)  
  257.             {  
  258.                 printf("用户名或密码错误,提示用户重新输入");  
  259.                 printf("用户名或密码错误,请重新输入!");  
  260.             }  
  261.             else  
  262.             {  
  263.                 printf("连续3次输错用户名或密码,退出系统。");  
  264.                 printf("您已连续3次将用户名或密码输错,系统将退出!");  
  265.                 exit(1);   
  266.             }  
  267.         }  
  268.    }  
  269. }  
  270. void menu()  
  271. {  
  272.   STUDENTS stu[20];  
  273.   int choice,k,sum;  
  274.   sum=read_file(stu);  
  275.   if(sum==0)  
  276.    {  printf("首先录入基本库存信息!按回车后进入—————\n");  
  277.       getch();  
  278.     sum=input(stu);  
  279.    }  
  280.     
  281.   do  
  282.   {  system("cls");    
  283.      printf("\n\n\n               ********图书信息管理系统********\n\n");  
  284.      printf("                      1. 创建图书信息\n\n");  
  285.      printf("                      2. 打印图书信息\n\n");  
  286.      printf("                      3. 查询图书信息\n\n");  
  287.      printf("                      4. 修改图书信息\n\n");  
  288.      printf("                      5. 删除图书信息\n\n");  
  289.      printf("                      6. 图书价格信息排名\n\n");  
  290.      printf("                      0. 退出系统\n\n");  
  291.      printf("                       请选择(0-6):");  
  292.      scanf("%d",&choice);   
  293.     switch(choice)  
  294.     {  
  295.       case 1: k=input(stu); break;/*创建图书信息*/  
  296.       case 2: output( stu) ; break;/*打印图书信息*/  
  297.       case 3: inquire(stu); break;/*查询图书信息*/  
  298.       case 4: change(stu); break;/*修改图书信息*/  
  299.       case 5: deletel(stu); break;/*删除图书信息*/  
  300.       case 6: sort(stu); break;/*图书价格信息排名*/  
  301.       case 0: break;  
  302.     }  
  303.   }while(choice!=0);  
  304.   save_file(stu,sum);  
  305. }  
  306. int main()  
  307. {    
  308.   int i,sum;  
  309.   pquantitydis();  
  310.   check();  
  311.   menu();     
  312. }       
原创粉丝点击