📄 教材订购系统.c
字号:
return(n);
}
void dispose_buy_list()/*处理订购单*/
{int n=0;
USER*p,*head_user;
BOOK*head_book,*head_store,*store,*q,*p3,*p4,*copy;
head_store=load("store");
head_user=load_user_record("all_user");
if(head_user==NULL){printf("没有用户提交订购单!!!\n");}
if(head_store==NULL){printf("\n库存是空的!!!请您先检查库存!!!\n");}
if(head_store==NULL||head_user==NULL){printf("按任意键继续");getch();return;}
if(head_user&&head_store)
{p=head_user;
while(p)
{head_book=load(p->num);
if(head_book)
{n++;
print_book_list(head_book);
if(cmp_store(head_store,head_book)>0)/*与库存相比较,当库存有满足需求的书籍时*/
{books_list_save(head_store,"store");/*存储修改后的库存*/
return_list(head_book,p);/*返回领书单*/
delete_file(p->num);/*删除原来的订购单*/
}
else if(cmp_store(head_store,head_book)==0)
{p3=head_store;/*若该用户所有订购的书籍库存都不能满足*/
p4=head_book;
while(p3->next)p3=p3->next;
for(p4=head_book;p4;p4=p4->next)/*在库存表尾生成新的接点*/
{copy=(BOOK *)malloc(BOOK_LEN);
strcpy(copy->nam,p4->nam);
strcpy(copy->editor,p4->editor);
copy->next=NULL;
copy->amount=-p4->amount;
copy->tag1=0;
copy->tag2=0;
p3->next=copy;
p3=copy;
}
head_store=together(head_store);/*合并同名书籍的数量*/
books_list_save(head_store,"store");
}
}
p=p->next;
}
if(n==0){system("cls");printf("\n\n\n\n\n\n 没有用户提交订购单!!!");getch();}
}
check_about_lack(head_store);
return;
}
void delete_file(char filename[])/*删除文件*/
{char a[10]="c:\\";
char b[5]=".txt";
strcat(a,filename);
strcat(a,b);
remove(a);
return;
}
int cmp_store(BOOK *head_store,BOOK *head_book)/*检查库存是否存在该书籍且足够数目*/
{BOOK *p1,*p2,*head_lack,*p3;
int count=0;
p1=head_book;
p2=head_store;
if(p2)
while(p1)
{p2=head_store;
while(p2&&strcmp(p1->nam,p2->nam)!=0)p2=p2->next;
if(p2)/*如果指针不空*/
{p1->tag1=1;/*则标记为存在*/
if(p1->amount<=p2->amount)
{p1->tag2=1;/*如果数目存在,则标记足够*/
p2->amount=p2->amount-p1->amount;/*将库存记录的数量改成取书后的数量*/
count++;
}
}
p1=p1->next;
}
return(count);
}
void check_about_lack(BOOK *head_store)/*登记入缺书表*/
{BOOK *p;
FILE *fp;
if((fp=fopen("c:\\lack.txt","a"))==NULL)
{return ;}
p=head_store;
while(p)
{ if(p->amount<=0)
{
fwrite(p,BOOK_LEN,1,fp);
}
p=p->next;
}
fclose(fp);
return;
}
void return_list(BOOK *head_book,USER *head_user)/*返回领书单*/
{BOOK*p;
FILE*fp;
char a[100]="c:\\f";
char b[5]=".txt";
strcat(a,head_user->num);
strcat(a,b);
if((fp=fopen(a,"a"))==NULL)
{
return;
}
p=head_book;
while(p)
{if(p->tag1==1&&p->tag2==1)fwrite(p,BOOK_LEN,1,fp);
p=p->next;
}
fclose(fp);
return;
}
void about_system()/*系统备注*/
{
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(" | (按任意键继续) |\n");
printf(" | |\n");
printf(" | 制作人: 湛广豪 学号3106007021 |\n");
printf(" | 张亮 学号3106007022 |\n");
printf(" | 张伟柱 学号3106007023 |\n");
printf(" | 甄兆聪 学号3106007024 |\n");
printf(" | |\n");
printf(" | 或许系统还有许多不足和出错的地方,如果您有任何的建议和意见 |\n");
printf(" | 都可以联系我们,我们乐意接受大家的意见,谢谢支持!!! |\n");
printf(" | |\n");
printf(" | |\n");
printf(" | E-mail:weizhuzhang@163.com |\n");
printf(" | |\n");
printf(" | |\n");
printf(" |*************************************************************|\n");
getch();
}
char quit()/*退出确定*/
{char n;
system("cls");/*刷屏*/
printf(" |*************************************************************|\n");
printf(" |=============================================================|\n");
printf(" | |\n");
printf(" | |\n");
printf(" | 您确定要退出吗? |\n");
printf(" | |\n");
printf(" | |\n");
printf(" | |\n");
printf(" | 按‘1’确定 ,按任意键取消 |\n");
printf(" | |\n");
printf(" | |\n");
printf(" |=============================================================|\n");
printf(" |*************************************************************|\n");
n=getch();
return n;
}
BOOK *obliterate(BOOK *head_book)/*删除*/
{BOOK *p1,*p2;
char book_name[30],edit_name[30];
system("cls");/*刷屏*/
printf(" 输入您相要删除的书籍名称 \n");
printf(" \n");
printf(" 输入‘0’返回 \n");
for(;;)
{if(head_book)
{printf("书名:");
scanf("%s",book_name);
if(book_name[0]=='0')break;
printf("主编:");
scanf("%s",edit_name);
p1=p2=head_book;
if(!strcmp(head_book->nam,book_name)&&!strcmp(head_book->editor,edit_name)){head_book=head_book->next;printf("……删除成功\n\n");}/*删除对象为首结点的情况*/
else/*删除对象为中间结点*/
{for(p1=head_book,p2=head_book->next;p2&&strcmp(p2->nam,book_name)&&strcmp(p2->editor,edit_name);p1=p2,p2=p2->next);/*查找到需删除接点时终止循环*/
if(p2)
{ p1->next=p1->next->next;
printf("……删除成功\n");
}
else printf("您的订购单中没有该书籍!!!!\n\n");
}
}
else {printf("\n您的订购单为空!!!!\n");getch();break;}
}
return(head_book);
}
void save_user_record(USER*head_user)/*追加记录用户名单-----------------------------------------------------------------*/
{FILE *fp;
USER *p,*q;
char a[100]="c:\\all_user.txt";
p=load_user_record("all_user");
while(p)/*检测该用户记录是否已经存在*/
{if(strcmp(p->num,head_user->num)==0)
{printf("\n\n\n\n\n %s 欢迎您使用本系统!!!",head_user->name);/*若存在,则结束该追加记录函数*/
getch();
return;
}
else p=p->next;
}
if(!p)
{if((fp=fopen(a,"a"))==NULL)
{
printf("Cannot open the file\n");
return;
}
fwrite(head_user,USER_LEN,1,fp);
printf("\n\n\n\n\n %s 欢迎您首次使用本系统!!!",head_user->name);
getch();
}
fclose(fp);
return;
}
void print_user_record()/*打印用户记录*/
{
USER*p;
p=load_user_record("all_user");
while(p)
{printf("NO.%s NAME: %s\n",p->num,p->name);
p=p->next;
}
getch();
return;
}
USER *load_user_record(char filename[])
{USER *p1,*p2,*head=NULL;
FILE *fp;
char a[100]="c:\\";
char b[5]=".txt";
strcat(a,filename);
strcat(a,b);
if((fp=fopen(a,"r"))==NULL)
{
return(head);
}
p1=(USER *)malloc(USER_LEN);
if(!p1)
{
printf("Out of memory!\n");
return(head);
}
head=p1;
while(!feof(fp))
{
if(fread(p1,USER_LEN,1,fp)!=1) break;
p1->next=(USER *)malloc(USER_LEN);
if(!p1->next)
{
printf("Out of memory!\n");
return (head);
}
p2=p1;
p1=p1->next;
}
p2->next=NULL;
fclose(fp);
return (head);
}
void create_file(char filename[])/*创建空文件(为了以后的追加做准备)*/
{char a[100]="c:\\";
char b[5]=".txt";
strcat(a,filename);
strcat(a,b);
if(fopen(filename,"at")==NULL)
{
printf("Cannot open the file\n");
}
}
BOOK *together(BOOK *head_book)/*归并相同的名称书籍*/
{BOOK *p1,*p2,*p3;
if(head_book)
{if(head_book->next)
for(p1=head_book;p1;p1=p1->next)
for(p2=p1,p3=p2->next;p3;p2=p3,p3=p3->next)
{if(!strcmp(p1->nam,p3->nam)&&!strcmp(p1->editor,p3->editor))
{p1->amount+=p3->amount;
p2->next=p2->next->next;
p3=p2;
}
}
}
return(head_book);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -