DVD影片管理系统,谁能帮我改改错球球了

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
typedef struct a{
char num;//影片编号
 char name[100]; //影片名
 char space;//影片地区类型
 char content;//影片内容
double price;//价格
 char date; //日期
    
 struct a* next;
}DVD,*List;

List head=NULL;

int  Login();    // 登陆
void Menu();      //   主菜单
int Choose();    //  选择功能
void Creathead(); // 创建头结点
void DisplayAll();  //  显示所有影片
void Delete();     //  删除影片
void DeleteAll();   // 删除所有
void Modify();     //  修改影片数据
void Search();      //  查找影片
void Sort();      // 排序
void Changedata(List p);   // 排序中的数据交换
void Save();       //  保存
int main()
{
 if(Login()==0) return 0;
  Reload();
 while (1)
 {
  Menu();
  switch (Choose())
  {
  case 1:
   Create(); break;
  case 2:
   Delete(); break;
  case 3:
      Search();break; 
  case 4:
   Modify(); break;
  case 6:
   DisplayAll(); break;
  case 5:
   DeleteAll(); break;
  case 7:
   Sort(); break;
  case 8:
   Save(); break;
  case 0:
    return 0;
  }
 }
}

int Login()
{
 while (1)
printf(".......................\n");
printf("DVD影片管理系统\n");
printf("\t1.新增影片\n");
printf("\t2.影片浏览\n");
printf("\t3.影片删除\n");
printf("\t4.影片修改\n");
printf("\t5.影片排序\n");
printf("\t6.影片查询\n");
printf("\t7.影片统计\n");
printf(".......................\n");
 }   int choose;
  char fusername[100], fpassword[100];
  char username[100], password[100];
  scanf("%d", &choose);
  if ('choose' == 1)
  {
   FILE* f1 = fopen("DVD.txt", "r");

   while ((c = getch()) != '\r')
   {
    if (c == '\b')
    {
     i--;
     putchar('\b');
     putchar(' ');
     putchar('\b');
    }
    else
    {
     password[i] = c;
     i++;
     putchar('*');
    }
   }
   printf("\n");
   password[i] = '\0';
   fscanf(f1, "%s %s", fusername, fpassword);
   if ((strcmp(fusername, username) == 0) && (strcmp(fpassword, password)) == 0)
   {
    getch();
    system("cls");
}

void Menu()
{
printf(".......................\n");
printf("DVD影片管理系统\n");
printf("\t1.新增影片\n");
printf("\t2.影片浏览\n");
printf("\t3.影片删除\n");
printf("\t4.影片修改\n");
printf("\t5.影片排序\n");
printf("\t6.影片查询\n");
printf("\t7.影片统计\n");
printf(".......................\n")
}

int Choose(){
 int n;
 printf("请输入序号:");
 while (scanf("%d", &n) != 1 || n < 0 || n>8)
 {
  printf("请重新输入:");
  scanf("%d", &n);
 }
 return n;
}

void Reload()
{
 int number,name,space,content,price,date;
char number;
 char name[100];
char space[100];
char content[100];
double price;
 char date[100][100][100];
 List b=head;
 FILE* p = fopen("data.txt", "a+");
 while (fscanf(p, "%d%s%s%s%lf%d",&number,name,&space,&content,&price,&date) == 6)
 {
  
  List a = (List)malloc(sizeof(DVD));
  b->next=a;  

  a->number= number;
  a->name =name;
  a->space = space;
  a->content= content;
  a->price=price;
  strcpy(a->name, name);
  
  int i; 
  for(i=0;i<number;i++)
  {
   fscanf(p,"%s",date[i]);
   strcpy(a->date[i], date[i]);
  }

  b = b->next;
  ++;
 }
 if(number!=0)
 b->next = NULL;
 printf("成功载入%d条信息\n\n", number);
 fclose(p);
}

void Creathead()
{
 List a=(List)malloc(sizeof(DVD));

 a->number = 0;
 a->name = 0;
 a->space= 0;
 a->content = 0;
 a->price = 0;
 strcpy(a->number, "0");
// strcpy(a->date, "0");
 a->next=NULL;
 head=a; 
}

 

void Creat()
{
 List a = (List)malloc(sizeof(DVD));

 printf(" 请输入影片编号: ");
 scanf("%s", a->number);
 printf("请输入影片名称: ");
 scanf("%s",&a->name);
 printf("请输入地区类型:");
 scanf("%s", &a->space);
 printf("请输入内容:  ");
 scanf("%d", &a->content);
 printf("请输入价格:  ");
 scanf("%lf", &a->price);
 
 printf("请输入日期:  ");
 scanf("%d", &a->date);

 int i;
 for(i=0;i< a->number;i++)
  scanf("%s", a->timeline[i]);

 a->next = NULL;
 List b = head;
 while (b->next != NULL)
  b = b->next;
 b->next = a;
 system("cls");
 printf("添加成功\n\n");
}

void Search()
{
 int flag = 1;
 List a,b;
 a=b = head->next;
 char name[100];
    printf("输入要查找的影片名:");
    scanf("%s", name);
 printf("\n");
 while(strcmp(a->name,name))
 {
  b=a;
  a=b->next;
  if (a== NULL)
  {
   printf("查找失败\n\n");
   flag = 0;
   break; 
  }
 } 
    if(flag)
 {
 printf("影片编号\t\t影片名称\t\t地区类型\t\t内容类型\t\t价格\t\出版日期\t\\n");
 printf("---------------------------------------------------------");
 printf("---------------------------------------------------\n");

 printf("%d\t%s\t\t%s\t\t%s\t\t%d\t\t%s\t\t\n",-10,a->number,a->name,a->space,a->content,a->price,a->date);
 int i;
 for(i=1;i<a->number;i++)
  printf("\t\t\t\t\t\t\t\t\t\t\t\t[%d]%s\n",i+1,a->date[i]);
 printf("\n");
    }
 printf("\n\n");
 getchar();
 getchar();
 system("cls");
}

void Delete()
{
 char choose;
 char name[100];
 List a=head,b=head;
 printf("输入要删除的影片名: ");
 scanf("%s",name);
 while(strcmp(a->name, name))
 {
  b=a;
  a = b->next;
 }
 printf("确认删除影片 %s (y/n)",a->name);
 getchar();
 scanf("%c",&choose);
 if(choose=='y')
 {
  b->next=a->next;
  free(a);
 }
}

void DeleteAll()
{
 List a, b;
 a = b = head->next;
 while (a != NULL)
 {
  b = a->next;
  free(a);
  a = b;
 }
 head->next = NULL;
 remove("data");
}


void Modify()
{
 int flag = 0;
 char name[100],choose;
 List a=head->next,b=head;
 getchar();
 printf("输入要修改的影片名: ");
 scanf("%s", name);
 getchar();
 while(a!=NULL)
 {
  if (strcmp(a->name, name) == 0)
  {
   flag = 1;
   break;
  }
  b = a;
  a = b->next;
 }
 if (flag)
 {
  printf("影片名为 %s 是否修改(y/n)", a->name);
  scanf("%c", &choose);
  getchar();
  if (choose == 'y')
  {
   printf("修改为:");
   
void DisplayAll()
{
 system("cls");
 List a, b;
 a = b = head->next;

 if (head->next == NULL)
 {
  printf("无数据");
  getchar();
  getchar();
  system("cls");
  return;
 }
  
 printf("影片编号\t\t影片名称\t\t地区类型\t\t内容类型\t\t价格\t\t出版日期\n");
 printf("---------------------------------------------------------");
 printf("---------------------------------------------------\n");

 while (a!=NULL)
 {
  printf("%s\t%s\t\t%s\t\t%s\t\t%d\t\t%s\t\t[1]%s\n",-10,a->number,a->name,a->space,a->content,a->price,a->date);
  int i;
  for(i=1;i<a->number;i++)
   printf("\t\t\t\t\t\t\t\t\t\t\t\t[%d]%s\n",i+1,a->date);
  printf("\n");
  b = a;
  a = b->next;
 } 
 getchar();
 getchar();
 system("cls");
}

void Sort()
{
 int a,b;
 printf("请选择 1.降序 2.升序 :");
 scanf("%d",&b);

 List p = head->next;
 List p1 = NULL;
 while (p != p1) 
 {
  while (p->next != p1) 
  {
   if (a == 1)
   {
    if (b == 1)
    {
     if (p->grade < p->next->grade)
     {
      Changedata(p);
     }
    }
    else if (b == 2)
    {
     if (p->grade > p->next->grade)
     {
      Changedata(p);
 
  }
  p1 = p;
  p = head->next; }

 printf("排序成功\n\n");
 getch();
 system("cls");
 
}

void Changedata(List p)
{
 double ex1 = p->number;
 p->number = p->next->number;
 p->next-> = ex1;

 int ex2 = p->name;
 p->name = p->next->name;
 p->next->name= ex2;

 int ex4 = p->space;
 p->space = p->next->space;
 p->next->space = ex4; 

 int ex5 = p->content;
 p->content = p->next->content;
 p->next->content = ex5;

 char temp[100];
 strcpy(temp, p->name);
 strcpy(p->name, p->next->name);
 strcpy(p->next->name, temp);

 char temp2[100][100];
 int i;
 for(i=0;i<p->number;i++)
  strcpy(temp2[i], p->date);
 for(i=0;i<p->next->number;i++)
  strcpy(p->timeline[i], p->next->date);
 for(i=0;i<p->number;i++)
  strcpy(p->next->date, temp2[i]);

 int ex3 = p->number;
 p->number = p->next->number;
 p->next->number = ex3;
}

void Save()
{
 if (head->next == NULL)
 {
  printf("未录入信息\n\n");
  return;
 }
fclose(p);

 printf("保存成功");
 getch();
 system("cls");
}

参考GPT和自己的思路:

首先,这段代码有很多语法错误和逻辑错误,需要仔细检查并进行修复。

以下是部分需要修正的问题:

1.结构体定义时,应该使用字符串数组而不是单个字符来存储字符串属性。

2.在登录函数中,没有读取用户名和密码,应该加入类似于以下的代码:

scanf("%s %s", username, password);

3.创建函数中输入影片内容的数据类型应该是字符串类型而不是整型。

4.在修改函数最后的输出语句中,应该将修改后的影片名作为参数输出。

5.在排序函数中,没有指定 a 的值,此处代码逻辑错误。

此外,代码中还有其他语法错误和逻辑错误,需要进一步检查和修正。建议您结合编译器提供的错误提示,逐行检查代码,并根据需要进行修改。