void xiugai() { int x; do { system("cls"); printf("\n\n\n\n"); printf("\t\t|-------------------------------------------------------------|\n"); printf("\t\t| ===================== |\n"); printf("\t\t| 修改图书信息 |\n"); printf("\t\t| ===================== |\n"); printf("\t\t| |\n"); printf("\t\t| 1.按书名查找 |\n"); printf("\t\t| 2.按书号查找 |\n"); printf("\t\t| 3.删除图书 |\n"); printf("\t\t| 4.返回主菜单 |\n"); printf("\t\t|-------------------------------------------------------------|\n"); printf("\t\t请输入您的选择:"); scanf("%d",&x); switch(x) { case 1:system("CLS");xiugai_name();break;/按书名查找名修改信息/ case 2:system("CLS");xiugai_num();break;/按书号查找并修改信息/ case 3:system("cls");dele();break; } }while(x!=4); } /主函数/ int main() { int x,x2,s;/s用来判断密码验证的结果/ do { system("cls"); x=mymainmenu(); switch(x) { case 1:/*调用管理员模式函数/ system("cls"); s=mimayanzheng();/密码验证/ do { if(s==1) { system("cls"); x2=adm(); switch(x2) { case 1:system("cls");xinxi();getch();break;/录入信息/ case 2:system("cls");show();break;/查看信息/ case 3:system("cls");xiugai();break;/修改信息/ case 4:system("cls");xiugaimima();break;/修改密码/ } } else { printf("\t密码错误!按任意键返回..."); getch(); break; } }while(x2!=5);break; case 2:/调用客户模式函数/ do { system("cls"); x2=peo(); switch(x2) { case 1:system("cls");show();getch();break;/查看图书信息/ case 2:system("cls");jieyue();getch();break;/借阅图书/ } }while(x2!=3); } }while(x!=3); system("cls"); printf("\n\n\n\n\n\n\n\n\n\n\n\n\t\t\t\t谢谢使用!\n\t\t\t"); getch(); }这些代码解释
时间: 2024-04-28 12:19:50 浏览: 8
这段代码是一个包含了图书借阅管理系统的主函数和一些辅助函数的程序。主函数中包含了一个do-while循环,用于处理用户的各种操作请求,直到用户选择退出程序为止。
其中,mymainmenu()函数用于显示主菜单,并返回用户选择的操作编号。根据选择的操作编号,程序会分别调用adm()和peo()函数,进入管理员模式和客户模式。
在管理员模式中,程序会调用mimayanzheng()函数,并根据返回值判断密码验证是否通过。如果密码验证通过,程序会继续显示管理员菜单,其中包含了录入信息、查看信息、修改信息和修改密码四个选项。相应的操作会调用xinxi()、show()、xiugai()和xiugaimima()等函数来完成。
在客户模式中,程序会调用peo()函数,并进入客户菜单,其中包含了查看图书信息和借阅图书两个选项。相应的操作会调用show()和jieyue()等函数来完成。
另外,xiugai()函数用于修改图书信息,包含了按书名查找并修改信息、按书号查找并修改信息和删除图书三个选项,相应的操作会调用xiugai_name()、xiugai_num()和dele()等函数来完成。
总之,这段代码实现了一个简单的图书借阅管理系统,提供了录入、查看、修改和删除图书等功能,同时还包含了管理员和客户两种不同的操作模式。
相关问题
那这样void xiugai() { int ch; system("cls"); system("color 6B"); printf("\n\n\n\t~~~~~~~修改订单~~~~~~~~~\n\n"); printf("\t输入1修改订单\t输入0返回上一级:"); scanf("%d",&ch); while(1){ switch(ch){ case 1:printf(p);break; case 0:printf("0");break; default:online();//退出 } printf("\t输入1修改订单\t输入0返回上一级:"); scanf("%d",&ch); } }这段代码始终再出现问题
这段代码仍然存在问题。具体问题如下:
1. 函数`xiugai`没有参数,无法访问链表中的节点数据,无法进行修改操作。
2. 函数`xiugai`中,调用了一个未定义的变量`p`,应该将其替换为调用修改函数的代码。
3. 函数`xiugai`中,修改订单的逻辑应该写在`case 1`中,而不是输出`p`。
综上所述,修改后的代码如下:
```
void xiugai(node* h) {
int ch;
system("cls");
system("color 6B");
printf("\n\n\n\t~~~~~~~修改订单~~~~~~~~~\n\n");
printf("\t输入1修改订单\t输入0返回上一级:");
scanf("%d", &ch);
while (1) {
switch (ch) {
case 1:
modification(h);//调用修改函数
break;
case 0:
printf("0");
break;
default:
online();//退出
}
printf("\t输入1修改订单\t输入0返回上一级:");
scanf("%d", &ch);
}
}
```
在修改订单时,应该先通过查询订单功能找到要修改的订单,再调用修改函数对其进行修改。因此,需要在查询订单函数中记录要修改的节点的指针,将其作为参数传递给修改函数。例如:
```
node* search(node* h, char* name) {
node* p = h->next;
while (p != NULL) {
if (strcmp(p->data.name, name) == 0) {
printf("名称:%s\n", p->data.name);
printf("增加时间:%lf\n", p->data.time);
printf("类型:%d\n", p->data.type);
return p;
}
p = p->next;
}
printf("未找到该订单!\n");
return NULL;
}
void xiugai(node* h) {
char name[20];
node* p;
printf("请输入要修改的订单名称:");
scanf("%s", name);
p = search(h, name);
if (p != NULL) {
modification(p);//将要修改的节点作为参数传递给修改函数
}
}
```
这样,在修改订单时,就可以先通过查询功能找到要修改的订单,然后将其作为参数传递给修改函数进行修改。
void xiugai(node *h){ int ch; system("cls"); system("color 6B"); printf("\n\n\n\t~~~~~~~修改订单~~~~~~~~~\n\n"); printf("\t输入1修改订单\t输入0返回上一级:"); scanf("%d",&ch); while(1){ switch(ch){ case 1:printf(h);break; case 0:printf("0");break; default:online();//退出 } printf("\t输入1修改订单\t输入0返回上一级:"); scanf("%d",&ch); } }这个代码错误存在在哪里
这段代码存在以下错误:
1. `printf(h)`应该改为`printf("%p", h)`,因为`printf`函数的第一个参数是格式化字符串,`%p`表示输出指针类型的地址值,而`h`是一个指向节点的指针变量,需要使用`%p`输出它的地址。
2. `case 1:`后面应该跟着一个语句块或者一条语句,而不是直接跟着`printf(h);`,因为`printf`函数并不是修改订单的操作。
3. `case 0:`后面应该跟着一个`return`语句,因为这个分支是返回上一级的操作,需要结束`xiugai`函数的执行。
4. `default:`后面应该跟着一个`return`语句,因为这个分支是退出程序的操作,需要结束整个程序的执行。
5. 在`while(1)`循环中,缺少一个`break`语句,用于在用户输入0时退出循环。
下面是修改后的代码:
```c
void xiugai(node *h) {
int ch;
system("cls");
system("color 6B");
printf("\n\n\n\t~~~~~~~修改订单~~~~~~~~~\n\n");
printf("\t输入1修改订单\t输入0返回上一级:");
scanf("%d", &ch);
while (1) {
switch (ch) {
case 1:
// TODO: 编写修改订单的代码
break;
case 0:
printf("返回上一级\n");
return;
default:
printf("退出程序\n");
return;
}
printf("\t输入1修改订单\t输入0返回上一级:");
scanf("%d", &ch);
if (ch == 0) {
printf("返回上一级\n");
break;
}
}
}
```