📄 教材订购系统.c
字号:
#include <stdio.h>
#include<dos.h>
#include<stdlib.h>
#include<string.h>
#include<ctype.h>
#include<malloc.h>
#include<time.h>
#include "conio.h"
#define USER_LEN sizeof(USER)
#define BOOK_LEN sizeof(BOOK)
typedef struct user/*用户*/
{char num[12];/*号码*/
char name[30];/*姓名*/
struct user *next;
}USER;
typedef struct book/*书籍*/
{char nam[30];/*名字*/
char editor[30];/*作者*/
int amount;/*数量*/
int tag1;/*库存标记*/
int tag2;/*数量是否足够标记*/
struct book *next;
}BOOK;
char first_menu();/*顶层菜单*/
USER *user_input();/*用户信息输入(完成)*/
BOOK *input_book_list();/*输入图书信息*/
void books_list_save(BOOK *head_book,char filename[]);/*以用户名为文件名存储书籍信息*/
void print_fetch(USER *head_user);/*显示领书单*/
char user_menu();/*教师学生菜单*/
char buyer_menu();/*采购员菜单*/
char issuer_menu();/*发行人员菜单*/
void dispose_buy_list();/*处理订购单*/
BOOK *load(char filename[]);/*打开存储书籍的文件*/
USER *load_user_record(char filename[]);/*打开存储用户信息的文件*/
void print_book_list(BOOK *head_book);/*显示书单(总共20行)*/
BOOK *obliterate(BOOK *head_book);/*删除*/
void save_user_record(USER*head);
void create_file(char filename[]);/*创建空文件(为了以后的追加做准备)*/
void add_to_store(BOOK*new_adding);/*加到库存*/
void print_user_record(USER*head_user);/*打印用户记录*/
int cmp_store(BOOK *head_store,BOOK *head_book);/*检查库存是否存在该书籍*/
void return_list();/*返回领书单*/
void delete_file(char filename[]);/*删除文件*/
void check_about_lack(BOOK *head_book);/*登记入缺书表*/
void week_day();/*显示星期*/
BOOK *together(BOOK *head_book);/*归并相同的名称书籍的数量*/
int check_amount(char input[]);/*检查输入的数字是否合法*/
int amount_do(char input[5]);
/*主要模块*/
void about_system();/*系统备注*/
char quit();/*退出确定*/
void tcher_stu_do();/*教师和学生模块*/
void buyer();/*采购员模块*/
void issuer();/*发行人员模块*/
void main()
{system("color 2f");
if(fopen("c:\\all_user.txt","r")==NULL)create_file("all_user");
printf("\n\n\n\n\n 欢迎进入学校教材订购系统!!!\n\n");
printf(" 按任意键继续 ");
getch();
for(;;)
switch(first_menu())
{case '0':switch(quit()){case'1':about_system();exit(0);break;
case'0':break;
}
break;
case '1':tcher_stu_do();break;
case '2':buyer();break;
case '3':issuer();break;
}
}
void week_day()
{char *wday[7]={"Sun","Mon","Tue","Wed","Thu","Fri","Sat"};
time_t timep;
struct tm *p;
int m;
time(&timep);
p=localtime(&timep); /*取得当地时间*/
if(!strcmp(wday[p->tm_wday],"Sun"))m=7;
if(!strcmp(wday[p->tm_wday],"Mon"))m=1;
if(!strcmp(wday[p->tm_wday],"Tue"))m=2;
if(!strcmp(wday[p->tm_wday],"Wed"))m=3;
if(!strcmp(wday[p->tm_wday],"Thu"))m=4;
if(!strcmp(wday[p->tm_wday],"Fri"))m=5;
if(!strcmp(wday[p->tm_wday],"Sat"))m=6;
switch(m)
{case 1:printf("星期一 |\n");break;
case 2:printf("星期二 |\n");break;
case 3:printf("星期三 |\n");break;
case 4:printf("星期四 |\n");break;
case 5:printf("星期五 |\n");break;
case 6:printf("星期六 |\n");break;
case 7:printf("星期日 |\n");break;
}
}
char first_menu()/*顶层菜单*/
{char n;
time_t timep;
struct tm *p;
time(&timep);
p=localtime(&timep); /*取得当地时间*/
system("cls");/*刷屏*/
printf(" |*************************************************************|\n");
printf(" | 今天是 %d年%d月%d日 ",(1900+p->tm_year),(1+p->tm_mon),p->tm_mday);week_day();
printf(" |=============================================================|\n");
printf(" | 欢迎使用我们的系统 |\n");
printf(" | |\n");
printf(" | (按 '0' 退出,) |\n");
printf(" |===========================MENU==============================|\n");
printf(" | 请根据选择输入您的身份 |\n");
printf(" | 1.教师或学生 |\n");
printf(" | 2.采购人员 |\n");
printf(" | 3.发行人员 |\n");
printf(" | |\n");
printf(" | |\n");
printf(" | |\n");
printf(" | |\n");
printf(" | |\n");
printf(" | |\n");
printf(" |*************************************************************|\n");
printf("\n\t\t\t您的选择是(1-3):");
scanf("%s",&n);
return(n);
}
USER *user_input()/*用户信息输入(完成)*/
{
USER *p,*head=NULL;
time_t timep;
struct tm *a;
p=(USER *)malloc(USER_LEN);
if(!p)
{printf("\nOut of memory.");
return (head);
}
time(&timep);
a=localtime(&timep); /*取得当地时间*/
system("cls");/*刷屏*/
printf(" |*************************************************************|\n");
printf(" | 今天是 %d年%d月%d日 ",(1900+a->tm_year),(1+a->tm_mon),a->tm_mday);week_day();
printf(" |=============================================================|\n");
printf(" | 欢迎使用我们的系统 |\n");
printf(" | |\n");
printf(" | (按 '0' 退出,) |\n");
printf(" |===========================MENU==============================|\n");
printf("\n\n\n");
printf(" 姓名(28个字符以内):");
scanf("%s",&p->name);
if(p->name[0]=='0') return(NULL);
while(strlen(p->name)>28)
{system("cls");
printf("您输入的姓名过长,请重新输入,不要超过28个字符");
getch();
system("cls");/*刷屏*/
printf(" |*************************************************************|\n");
printf(" | 今天是 %d年%d月%d日 ",(1900+a->tm_year),(1+a->tm_mon),a->tm_mday);week_day();
printf(" |=============================================================|\n");
printf(" | 欢迎使用我们的系统 |\n");
printf(" | |\n");
printf(" | (按 '0' 退出,) |\n");
printf(" |===========================MENU==============================|\n");
printf("\n\n\n");
printf(" 姓名(28个字符以内):");
scanf("%s",&p->name);
if(p->name[0]=='0') return(NULL);
}
printf("\n");
printf(" 号码(7位以内):");
scanf("%s",&p->num);
if(p->num[0]=='0') return(NULL);
while(strlen(p->num)>7)
{system("cls");
printf("您的号码过长请重新输入");
getch();
system("cls");
printf(" |*************************************************************|\n");
printf(" | 今天是 %d年%d月%d日 ",(1900+a->tm_year),(1+a->tm_mon),a->tm_mday);week_day();
printf(" |=============================================================|\n");
printf(" | 欢迎使用我们的系统 |\n");
printf(" | |\n");
printf(" | (按 '0' 退出,) |\n");
printf(" |===========================MENU==============================|\n");
printf("\n\n\n");
printf(" 姓名:%s",p->name);
printf("\n\n");
printf(" 号码(7位以内):");
scanf("%s",&p->num);
if(p->num[0]=='0') return(NULL);
}
p->next=NULL;
head=p;
return head;
} /*还没有对输入的数据长度做规范处理*/
/*还没有确定是否要对使用的用户做记录*/
/*文件的读取或是存储存在问题*/
BOOK *input_book_list(BOOK*head)/*输入图书信息*/
{BOOK *p1,*p2;
char input[5];
system("cls");
printf(" 输入需订购书籍的信息 \n\n");
printf(" 如果你知道该图书的主编则输入其姓名,否则输入'0' \n\n");
printf(" (按'0' 返回) \n\n\n\n");
if(head==NULL)
{head=p1=p2=(BOOK *)malloc(BOOK_LEN);/*输入第一个结点*/
do
{printf("书名:");/*输入书名*/
scanf("%s",head->nam);
if(head->nam[0]=='0'){return(NULL);}
if(strlen(head->nam)>28)printf("输入长度不能大于28个字符,请重新输入\n");
}while(strlen(head->nam)>28);
do
{printf("主编:");/*输入主编者名字*/
scanf("%s",head->editor);
if(head->editor[0]=='0')strcpy(head->editor,"UNKNWON");
if(strlen(head->editor)>28)printf("输入长度不能大于28个字符,请重新输入\n");
}while(strlen(head->editor)>28);
do
{printf("数量:");
scanf("%s",input);
if(strlen(input)>3)printf("输入不能多于3位,请重新输入\n");
}while(strlen(input)>3||check_amount(input));
head->amount=amount_do(input);/*将字符转成整型*/
head->tag1=0;
head->tag2=0;
head->next=NULL;
for(;;)/*输入后续的结点*/
{
p2=(BOOK *)malloc(BOOK_LEN);
do
{printf("书名:");/*输入书名*/
scanf("%s",p2->nam);
if(p2->nam[0]=='0')return(head);
if(strlen(p2->nam)>28)printf("输入长度不能大于28个字符,请重新输入\n");
}while(strlen(p2->nam)>28);
do
{printf("主编:");/*输入主编者名字*/
scanf("%s",p2->editor);
if(p2->editor[0]=='0')strcpy(p2->editor,"UNKNWON");
if(strlen(p2->editor)>28)printf("输入长度不能大于28个字符,请重新输入\n");
}while(strlen(p2->editor)>28);
do
{printf("数量:");
scanf("%s",input);
if(strlen(input)>3)printf("输入不能多于3位,请重新输入\n");
}while(strlen(input)>3||check_amount(input));
p2->amount=amount_do(input);/*将字符转成整型*/
p2->tag1=0;
p2->tag2=0;
p2->next=NULL;
p1->next=p2;
p1=p2;
}
}
else
{
p1=p2=head;
while(p1->next)p1=p1->next;/*将指针移动到最后*/
for(;;)/*输入后续的结点*/
{
p2=(BOOK *)malloc(BOOK_LEN);
do
{printf("书名:");/*输入书名*/
scanf("%s",p2->nam);
if(p2->nam[0]=='0')return(head);
if(strlen(p2->nam)>28)printf("输入长度不能大于28个字符,请重新输入\n");
}while(strlen(p2->nam)>28);
do
{printf("主编:");/*输入主编者名字*/
scanf("%s",p2->editor);
if(p2->editor[0]=='0')strcpy(p2->editor,"UNKNWON");
if(strlen(p2->editor)>28)printf("输入长度不能大于28个字符,请重新输入\n");
}while(strlen(p2->editor)>28);
do
{printf("数量:");
scanf("%s",input);
if(strlen(input)>3)printf("输入不能多于3位,请重新输入\n");
}while(strlen(input)>3||check_amount(input));
p2->amount=amount_do(input);/*将字符转成整型*/
p2->tag1=0;
p2->tag2=0;
p2->next=NULL;
p1->next=p2;
p1=p2;
}
}
return(head);
}
int check_amount(char input[])/*检查输入的数字是否合法*/
{int len,n;
len=strlen(input)-1;
for(n=0;n<=len;n++)
{if(!(input[n]>='0'&&input[n]<='9')){printf("输入不合法!!!\n");return 1;}
}
return 0;
}
int amount_do(char input[5])
{int len,n,value=0,hundred=100,ten=10;
int a[5];
len=(strlen(input)-1);
for(n=0;n<=len;n++)/*input中的每一个字符转成整型*/
{switch(input[n])
{case'0':a[n]=0;break;
case'1':a[n]=1;break;
case'2':a[n]=2;break;
case'3':a[n]=3;break;
case'4':a[n]=4;break;
case'5':a[n]=5;break;
case'6':a[n]=6;break;
case'7':a[n]=7;break;
case'8':a[n]=8;break;
case'9':a[n]=9;break;
}
}
switch(len)/*求总值*/
{case 0:value=a[0];break;
case 1:value=a[0]*ten+a[1];break;
case 2:value=a[0]*hundred+a[2];break;
}
return(value);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -