老师布置的一个项目,我打算用单链表去实现它,有相似的同学在这里可以提供一个思路,技术不精,还望海涵。
项目名称:影视作品收录系统
要求:
1.设计一个结构体用来表示作品信息,有影视作品名称,导演,编辑,主演,类型,制片国家/地区,语言,上映日期,片长,简介,评价星级等信息。
2.制作菜单可供用户选择使用,分为管理员账户与普通账户。
管理员账户可以添加作品、下架作品,修改作品,按名称查询,按类型查询以及显示所有作品;普通账户只能按名称查询,按类型查询和显示所有作品信息。
3.管理员账户可以根据影视作品的名称、类型修改作品信息。
4.初始默认状态有10部作品。
typedef struct movie //一部电影的信息
{char *Name; //名称
char *Director; //导演
char *Edit; //编辑
char *Actor; //主演
char *Type; //类型
char *Prodct; //制品国家/区域
char *Language; //语言
char *Release; //上映
char *Length; //片长
char *Introduction; //简介
float Star; //评价星级
struct movie *Next; //指向下一部电影存放的位置
}FILM;
2.给节点开辟空间FILM *Space(FILM *p)
{p = (FILM *)malloc(sizeof(FILM));
p->Name=(char *)malloc(50); //电影名称
p->Director=(char *)malloc(50); //电影导演
p->Edit=(char *)malloc(100); //电影编剧
p->Actor=(char *)malloc(100); //电影主演
p->Type=(char *)malloc(100); //电影类型
p->Prodct=(char *)malloc(20); //制作国家/地区
p->Language=(char *)malloc(30); //语言
p->Release=(char *)malloc(100); //上映时间
p->Length=(char *)malloc(60); //电影时长
p->Introduction=(char *)malloc(2000); //电影简介
p->Next=NULL;
return p;
}
3.初始化链表用txt文档的内容作初始化
int check(const char *f)//检查存放作品的文档在不在 参数是argv[1].
{FILE *f1;
f1=fopen(f,"r+");//文档必须存在
if(f1==NULL)
return 0;
else
return 1;
}
FILM *Init(const char *p,int a)//参数:argv[1]和check函数返回值
{if(a==0)
{printf("影视信息库不存在!\n");
return NULL;
}
else
{char *aName=(char *)malloc(50);
char *aDirector=(char *)malloc(50);
char *aEdit=(char *)malloc(100);
char *aActor=(char *)malloc(100);
char *aType=(char *)malloc(100);
char *aProdct=(char *)malloc(10);
char *aLanguage=(char *)malloc(100);
char *aRelease=(char *)malloc(100);
char *aLength=(char *)malloc(100);
char *aIntroduction=(char *)malloc(2000);
float aStar;
FILE *f1;
FILM *head;
FILM *tail;
FILM *new;
head=Space(head);
tail=head;
f1=fopen(p,"r");
if(f1==NULL)
{ printf("影视信息库打开失败\n");
return NULL;
}
else
{ while(fscanf(f1,"%s%s%s%s%s%s%s%s%s%s%f\n",
aName,aDirector,aEdit,aActor,aType,aProdct,aLanguage,
aRelease,aLength,aIntroduction,&aStar)!=EOF)
{ new=Space(new);
strcpy(new->Name,aName);
strcpy(new->Director,aDirector);
strcpy(new->Edit,aEdit);
strcpy(new->Actor,aActor);
strcpy(new->Type,aType);
strcpy(new->Prodct,aProdct);
strcpy(new->Language,aLanguage);
strcpy(new->Release,aRelease);
strcpy(new->Length,aLength);
strcpy(new->Introduction,aIntroduction);
new->Star=aStar;
tail->Next=new;
tail=new;
}
}
fclose(f1);
return head;
}
}
4.按名字查找作品FILM *Nsearch(FILM *p,char *n)//参数:链表首元节点(也就是第一个空的那个)
{ //还有就是要查找的作品名称
FILM *m2=p->Next;
while(m2!=NULL&&strcmp(m2->Name,n))
m2=m2->Next;
if (m2==NULL)
{printf("Sorry,信息库并没有这部电影\n");
return NULL;
}
else
return m2;
}
5.按类型查找作品FILM *Tsearch(FILM *p,char *t)//参数:链表首元节点和要查找的作品类型
{FILM *m2=p->Next;
FILM *head;
FILM *tail;
FILM *new;
head=Space(head);
tail=head;
while(m2!=NULL)
{if(strstr(m2->Type,t)==NULL)
m2=m2->Next;
else
{ new=Space(new);
strcpy(new->Name,m2->Name);
strcpy(new->Director,m2->Director);
strcpy(new->Edit,m2->Edit);
strcpy(new->Actor,m2->Actor);
strcpy(new->Type,m2->Type);
strcpy(new->Prodct,m2->Prodct);
strcpy(new->Language,m2->Language);
strcpy(new->Release,m2->Release);
strcpy(new->Length,m2->Length);
strcpy(new->Introduction,m2->Introduction);
new->Star=m2->Star;
tail->Next=new;
tail=new;
m2=m2->Next;
}
}
if(head==NULL)
{printf("信息库并没有这个类型的电影\n");
return head;
}
else
return head;
}
6.添加作品FILM *Addflim(FILM *p)//参数是链表首元节点
{int n; //添加电影数量
int flag=1;
FILM *tial=p->Next;
FILM *new; //新添加的电影
printf("需要添加几部电影:");
scanf("%d",&n);
while(tial->Next!=NULL)
tial=tial->Next;
for (int i = 0; i< n; ++i)
{new=Space(new);
printf("请输入新电影的名字: \n");
scanf("%s",new->Name);
printf("请输入新电影的导演: \n");
scanf("%s",new->Director);
printf("请输入新电影的编辑: \n");
scanf("%s",new->Edit);
printf("请输入新电影的主演: \n");
scanf("%s",new->Actor);
printf("请输入新电影的类型: \n");
scanf("%s",new->Type);
printf("请输入新电影的制作国家/地区: \n");
scanf("%s",new->Prodct);
printf("请输入新电影的语言: \n");
scanf("%s",new->Language);
printf("请输入新电影的上映时间: \n");
scanf("%s",new->Release);
printf("请输入新电影的时长: \n");
scanf("%s",new->Length);
printf("请输入新电影的简介: \n");
scanf("%s",new->Introduction);
printf("请输入新电影的评价星级: \n");
scanf("%f",&new->Star);
tial->Next=new;
tial=new;
}
return p;
}
7.修改作品FILM *Modify(FILM *p)//参数链表首元节点
{int flag=1;
int n;
char *n1=(char *)malloc(50);
char *t1=(char *)malloc(50);
FILM *m1=p;
FILM *m2;
FILM *m3;
FILM *m4;
while(flag)
{printf("1-按名字查找并修改 2-按类型查找并修改 3-退出修改\n");
scanf("%d",&n);
switch(n)
{ case 1:
printf("请输入要修改的电影名称: ");
scanf("%s",n1);
m2=Nsearch(m1,n1);
//Display1(m2);break;//测试
if(m2==NULL)
break;
else
{printf("修改电影名称: \n");
scanf("%s",m2->Name);
printf("修改电影的导演: \n");
scanf("%s",m2->Director);
printf("修改电影的编辑: \n");
scanf("%s",m2->Edit);
printf("修改电影的主演: \n");
scanf("%s",m2->Actor);
printf("修改电影的类型: \n");
scanf("%s",m2->Type);
printf("修改电影的制作国家/地区: \n");
scanf("%s",m2->Prodct);
printf("修改电影的语言: \n");
scanf("%s",m2->Language);
printf("修改电影的上映时间: \n");
scanf("%s",m2->Release);
printf("修改电影的时长: \n");
scanf("%s",m2->Length);
printf("修改电影的简介: \n");
scanf("%s",m2->Introduction);
printf("修改电影的评价星级: \n");
scanf("%f",&m2->Star);
break;
}
case 2:
printf("请输入要修改的电影类型: ");
scanf("%s",t1);
m2=Tsearch(m1,t1);
if(m2==NULL)
break;
else
{printf("符合该类型的电影如下:\n");
Displayall(m2);
m2=m2->Next;
while(m2!=NULL)
{m3=Nsearch(m1,m2->Name);
printf("请修改%s\n", m2->Name);
printf("\n");
printf("修改电影名称: \n");
scanf("%s",m3->Name);
printf("修改电影的导演: \n");
scanf("%s",m3->Director);
printf("修改电影的编辑: \n");
scanf("%s",m3->Edit);
printf("修改电影的主演: \n");
scanf("%s",m3->Actor);
printf("修改电影的类型: \n");
scanf("%s",m3->Type);
printf("修改电影的制作国家/地区: \n");
scanf("%s",m3->Prodct);
printf("修改电影的语言: \n");
scanf("%s",m3->Language);
printf("修改电影的上映时间: \n");
scanf("%s",m3->Release);
printf("修改电影的时长: \n");
scanf("%s",m3->Length);
printf("修改电影的简介: \n");
scanf("%s",m3->Introduction);
printf("修改电影的评价星级: \n");
scanf("%f",&m3->Star);
m2=m2->Next;
}
}break;
case 3:flag=0;break;
default:printf("输入错误,请重新选择\n");getchar();break;
}
}
return p;
}
8.下架作品FILM *Delete(FILM *p)//参数:链表首元节点
{char *n1=(char *)malloc(50);
FILM *m1=p;
FILM *m2;
printf("请输入要删除的电影名称: ");
scanf("%s",n1);
while(m1->Next!=NULL)
{if(strcmp(m1->Next->Name,n1))
m1=m1->Next;
else
{ m1->Next=m1->Next->Next;
return p;
}
}
printf("信息库没有这部电影,无法删除\n");
return NULL;
}
9.显示所有作品void Displayall(FILM *p)//参数:链表首元节点
{FILM *m1=p->Next;
while(m1!=NULL)
{printf("\n电影名称:%s\n", m1->Name);
printf("电影导演:%s\n", m1->Director);
printf("电影编剧:%s\n", m1->Edit);
printf("电影主演:%s\n", m1->Actor);
printf("电影类型:%s\n", m1->Type);
printf("制作国家/地区:%s\n", m1->Prodct);
printf("语言:%s\n", m1->Language);
printf("上映时间:%s\n", m1->Release);
printf("电影时长:%s\n", m1->Length);
printf("电影简介:%s\n", m1->Introduction);
printf("评价星级:%.1f\n", m1->Star);
printf("\n");
m1=m1->Next;
}
}
10.只显示一部作品void Display1(FILM *p)//参数:按名称找到的节点位置
{FILM *m1=p;
printf("\n电影名称:%s\n", m1->Name);
printf("电影导演:%s\n", m1->Director);
printf("电影编剧:%s\n", m1->Edit);
printf("电影主演:%s\n", m1->Actor);
printf("电影类型:%s\n", m1->Type);
printf("制作国家/地区:%s\n", m1->Prodct);
printf("语言:%s\n", m1->Language);
printf("上映时间:%s\n", m1->Release);
printf("电影时长:%s\n", m1->Length);
printf("电影简介:%s\n", m1->Introduction);
printf("评价星级:%.1f\n", m1->Star);
printf("\n");
}
11.普通账户菜单void Ordinary(FILM *p)
{int n;
int flag=1;
char *n1;
char *t1;
FILM *m1; //找按名称的电影
FILM *m2=p; //传参
FILM *m3; //找按类型的电影
n1=(char *)malloc(50);
t1=(char *)malloc(50);
while(flag)
{printf("1-查询所有电影信息 2-按名称查询电影信息 3-按类型查询电影信息 4-退出用户模式\n");
scanf("%d",&n);
switch(n)
{ case 1:Displayall(p);break;
case 2:
printf("请输入想看的电影名称: ");
scanf("%s",n1);
m1=Nsearch(m2,n1);
if(m1==NULL)
break;
else
{Display1(m1);
break;
}
case 3:
printf("请输入想看的电影类型: ");
scanf("%s",t1);
m3=Tsearch(m2,t1);
if(m3==NULL)
break;
else
{Displayall(m3);
break;
}
case 4:flag=0;break;
default:printf("输入错误,请重新输入\n");getchar();break;
}
}
}
12.管理员账户菜单void Admini(FILM *p)
{char *password="123456";
char *n1=(char *)malloc(50);
char *t1=(char *)malloc(50);
char *mima=(char *)malloc(10);
int flag=1; //退出管理员模式标志
int n; //管理员功能选择
FILM *m1; //按名称查找电影
FILM *m2=p; //函数传参
FILM *m3; //按类型查找电影
FILM *m4=p; //改变电影库前
FILM *m5; //改变电影库后
printf("请输入管理员密码: ");
scanf("%s",mima);
while(strcmp(mima,password))
{printf("密码错误,请重新输入: ");
scanf("%s",mima);
}
while(flag)
{if (!strcmp(mima,password))
{ printf("<----------------------1-添加电影 2-修改电影 3-下架电影---------------------->\n");
printf("4-查询所有电影信息 5-按名称查找电影信息 6-按类型查找电影信息 7-退出管理员模式\n");
scanf("%d",&n);
switch(n)
{ case 1:
m5=Addflim(m4);
printf("增加后的电影列表如下\n");
Displayall(m5);
break;
case 2:
m5=Modify(m4);
printf("修改后的电影列表如下\n");
Displayall(m5);
break;
case 3:
m5=Delete(m4);
if(m5==NULL)
break;
else
{printf("下架后的电影列表如下\n");
Displayall(m5);
break;
}
case 4:Displayall(p);break;
case 5:
printf("请输入查找的电影名称: ");
scanf("%s",n1);
m1=Nsearch(m2,n1);
if(m1==NULL)
break;
else
{Display1(m1);
break;
}
case 6:
printf("请输入查找的电影类型: ");
scanf("%s",t1);
m3=Tsearch(m2,t1);
if(m3==NULL)
break;
else
{Displayall(m3);
break;
}
case 7:flag=0;break;
default:printf("输入错误,请重新选择\n");getchar();break;
}
}
}
}
先用文件操作对单链表初始化,单链表储存数据,每次传参时都传递链表的首元节点,便于理解和操作。
缺陷:退出系统后全部恢复默认状态,无法更新数据库。(c语言fprintf函数不支持中文等多字节数据,汉字的文本操作还不会)
由于是初学者,一些地方可能写的不好,希望大家多多包涵,也祝愿大家共同进步。
#include#include#includetypedef struct movie //一部电影的信息
{char *Name; //名称
char *Director; //导演
char *Edit; //编辑
char *Actor; //主演
char *Type; //类型
char *Prodct; //制品国家/区域
char *Language; //语言
char *Release; //上映
char *Length; //片长
char *Introduction; //简介
float Star; //评价星级
struct movie *Next; //指向下一部电影存放的位置
}FILM;
FILM *Init(const char *p,int a); //使用文件操作对进行链表初始化
FILM *Space(FILM *p); //为链表的节点申请空间
int check(const char *f); //检查库文件
void Displayall(FILM *p); //显示所有电影
void Display1(FILM *p); //显示一部电影
void Ordinary(FILM *p); //普通用户使用
void Admini(FILM *p); //管理员使用
FILM *Nsearch(FILM *p,char *n); //按名字查找电影
FILM *Tsearch(FILM *p,char *t); //按类型查找电影
FILM *Addflim(FILM *p); //添加电影
FILM *Modify(FILM *p); //修改电影
FILM *Delete(FILM *p); //删除电影
int main(int argc, char const *argv[])
{int n; //选择:普通用户/管理员
int flag=1; //结束收录系统标志
FILM *m1; //指向链表头的指针
m1 = Init(argv[1],check(argv[1])); //给链表初始化
while(flag)
{printf("1-普通用户 2-管理员 3-退出\n");
scanf("%d",&n);
switch(n)
{ case 1:Ordinary(m1);break;
case 2:Admini(m1);break;
case 3:printf("感谢你的使用,欢迎下次再来\n");flag=0;break;
default:printf("您的输入存在错误,请重新输入\n");break;
}
}
return 0;
}
int check(const char *f)
{FILE *f1;
f1=fopen(f,"r+"); //库文件必须存在
if(f1==NULL)
return 0;
else
return 1;
}
FILM *Init(const char *p,int a)
{if(a==0)
{printf("影视信息库不存在!\n");
return NULL;
}
else
{char *aName=(char *)malloc(50);
char *aDirector=(char *)malloc(50);
char *aEdit=(char *)malloc(100);
char *aActor=(char *)malloc(100);
char *aType=(char *)malloc(100);
char *aProdct=(char *)malloc(10);
char *aLanguage=(char *)malloc(100);
char *aRelease=(char *)malloc(100);
char *aLength=(char *)malloc(100);
char *aIntroduction=(char *)malloc(2000);
float aStar;
FILE *f1;
FILM *head;
FILM *tail;
FILM *new;
head=Space(head);
tail=head;
f1=fopen(p,"r");
if(f1==NULL)
{ printf("影视信息库打开失败\n");
return NULL;
}
else
{ while(fscanf(f1,"%s%s%s%s%s%s%s%s%s%s%f\n",
aName,aDirector,aEdit,aActor,aType,aProdct,aLanguage,
aRelease,aLength,aIntroduction,&aStar)!=EOF)
{ new=Space(new);
strcpy(new->Name,aName);
strcpy(new->Director,aDirector);
strcpy(new->Edit,aEdit);
strcpy(new->Actor,aActor);
strcpy(new->Type,aType);
strcpy(new->Prodct,aProdct);
strcpy(new->Language,aLanguage);
strcpy(new->Release,aRelease);
strcpy(new->Length,aLength);
strcpy(new->Introduction,aIntroduction);
new->Star=aStar;
tail->Next=new;
tail=new;
}
}
fclose(f1);
return head;
}
}
FILM *Space(FILM *p)
{p = (FILM *)malloc(sizeof(FILM));
p->Name=(char *)malloc(50); //电影名称
p->Director=(char *)malloc(50); //电影导演
p->Edit=(char *)malloc(100); //电影编剧
p->Actor=(char *)malloc(100); //电影主演
p->Type=(char *)malloc(100); //电影类型
p->Prodct=(char *)malloc(20); //制作国家/地区
p->Language=(char *)malloc(30); //语言
p->Release=(char *)malloc(100); //上映时间
p->Length=(char *)malloc(60); //电影时长
p->Introduction=(char *)malloc(2000); //电影简介
p->Next=NULL;
return p;
}
void Displayall(FILM *p)
{FILM *m1=p->Next;
while(m1!=NULL)
{printf("\n电影名称:%s\n", m1->Name);
printf("电影导演:%s\n", m1->Director);
printf("电影编剧:%s\n", m1->Edit);
printf("电影主演:%s\n", m1->Actor);
printf("电影类型:%s\n", m1->Type);
printf("制作国家/地区:%s\n", m1->Prodct);
printf("语言:%s\n", m1->Language);
printf("上映时间:%s\n", m1->Release);
printf("电影时长:%s\n", m1->Length);
printf("电影简介:%s\n", m1->Introduction);
printf("评价星级:%.1f\n", m1->Star);
printf("\n");
m1=m1->Next;
}
}
void Display1(FILM *p)
{FILM *m1=p;
printf("\n电影名称:%s\n", m1->Name);
printf("电影导演:%s\n", m1->Director);
printf("电影编剧:%s\n", m1->Edit);
printf("电影主演:%s\n", m1->Actor);
printf("电影类型:%s\n", m1->Type);
printf("制作国家/地区:%s\n", m1->Prodct);
printf("语言:%s\n", m1->Language);
printf("上映时间:%s\n", m1->Release);
printf("电影时长:%s\n", m1->Length);
printf("电影简介:%s\n", m1->Introduction);
printf("评价星级:%.1f\n", m1->Star);
printf("\n");
}
void Ordinary(FILM *p)
{int n;
int flag=1;
char *n1;
char *t1;
FILM *m1; //找按名称的电影
FILM *m2=p; //传参
FILM *m3; //找按类型的电影
n1=(char *)malloc(50);
t1=(char *)malloc(50);
while(flag)
{printf("1-查询所有电影信息 2-按名称查询电影信息 3-按类型查询电影信息 4-退出用户模式\n");
scanf("%d",&n);
switch(n)
{ case 1:Displayall(p);break;
case 2:
printf("请输入想看的电影名称: ");
scanf("%s",n1);
m1=Nsearch(m2,n1);
if(m1==NULL)
break;
else
{Display1(m1);
break;
}
case 3:
printf("请输入想看的电影类型: ");
scanf("%s",t1);
m3=Tsearch(m2,t1);
if(m3==NULL)
break;
else
{Displayall(m3);
break;
}
case 4:flag=0;break;
default:printf("输入错误,请重新输入\n");getchar();break;
}
}
}
void Admini(FILM *p)
{char *password="123456";
char *n1=(char *)malloc(50);
char *t1=(char *)malloc(50);
char *mima=(char *)malloc(10);
int flag=1; //退出管理员模式标志
int n; //管理员功能选择
FILM *m1; //按名称查找电影
FILM *m2=p; //函数传参
FILM *m3; //按类型查找电影
FILM *m4=p; //改变电影库前
FILM *m5; //改变电影库后
printf("请输入管理员密码: ");
scanf("%s",mima);
while(strcmp(mima,password))
{printf("密码错误,请重新输入: ");
scanf("%s",mima);
}
while(flag)
{if (!strcmp(mima,password))
{ printf("<----------------------1-添加电影 2-修改电影 3-下架电影---------------------->\n");
printf("4-查询所有电影信息 5-按名称查找电影信息 6-按类型查找电影信息 7-退出管理员模式\n");
scanf("%d",&n);
switch(n)
{ case 1:
m5=Addflim(m4);
printf("增加后的电影列表如下\n");
Displayall(m5);
break;
case 2:
m5=Modify(m4);
printf("修改后的电影列表如下\n");
Displayall(m5);
break;
case 3:
m5=Delete(m4);
if(m5==NULL)
break;
else
{printf("下架后的电影列表如下\n");
Displayall(m5);
break;
}
case 4:Displayall(p);break;
case 5:
printf("请输入查找的电影名称: ");
scanf("%s",n1);
m1=Nsearch(m2,n1);
if(m1==NULL)
break;
else
{Display1(m1);
break;
}
case 6:
printf("请输入想看的电影类型: ");
scanf("%s",t1);
m3=Tsearch(m2,t1);
if(m3==NULL)
break;
else
{Displayall(m3);
break;
}
case 7:flag=0;break;
default:printf("输入错误,请重新选择\n");getchar();break;
}
}
}
}
FILM *Nsearch(FILM *p,char *n)
{ FILM *m2=p->Next;
while(m2!=NULL&&strcmp(m2->Name,n))
m2=m2->Next;
if (m2==NULL)
{printf("Sorry,信息库并没有这部电影\n");
return NULL;
}
else
return m2;
}
FILM *Tsearch(FILM *p,char *t)
{int flag=1;
FILM *m2=p->Next;
FILM *head;
FILM *tail;
FILM *new;
head=Space(head);
tail=head;
while(m2!=NULL)
{if(strstr(m2->Type,t)==NULL)
m2=m2->Next;
else
{ new=Space(new);
strcpy(new->Name,m2->Name);
strcpy(new->Director,m2->Director);
strcpy(new->Edit,m2->Edit);
strcpy(new->Actor,m2->Actor);
strcpy(new->Type,m2->Type);
strcpy(new->Prodct,m2->Prodct);
strcpy(new->Language,m2->Language);
strcpy(new->Release,m2->Release);
strcpy(new->Length,m2->Length);
strcpy(new->Introduction,m2->Introduction);
new->Star=m2->Star;
tail->Next=new;
tail=new;
m2=m2->Next;
}
}
if(head==NULL)
{printf("信息库并没有这个类型的电影\n");
return head;
}
else
return head;
}
FILM *Addflim(FILM *p)
{int n; //添加电影数量
int flag=1;
FILM *tial=p->Next;
FILM *new; //新添加的电影
printf("需要添加几部电影:");
scanf("%d",&n);
while(tial->Next!=NULL)
tial=tial->Next;
for (int i = 0; i< n; ++i)
{new=Space(new);
printf("请输入新电影的名字: \n");
scanf("%s",new->Name);
printf("请输入新电影的导演: \n");
scanf("%s",new->Director);
printf("请输入新电影的编辑: \n");
scanf("%s",new->Edit);
printf("请输入新电影的主演: \n");
scanf("%s",new->Actor);
printf("请输入新电影的类型: \n");
scanf("%s",new->Type);
printf("请输入新电影的制作国家/地区: \n");
scanf("%s",new->Prodct);
printf("请输入新电影的语言: \n");
scanf("%s",new->Language);
printf("请输入新电影的上映时间: \n");
scanf("%s",new->Release);
printf("请输入新电影的时长: \n");
scanf("%s",new->Length);
printf("请输入新电影的简介: \n");
scanf("%s",new->Introduction);
printf("请输入新电影的评价星级: \n");
scanf("%f",&new->Star);
tial->Next=new;
tial=new;
}
return p;
}
FILM *Modify(FILM *p)
{int flag=1;
int n;
char *n1=(char *)malloc(50);
char *t1=(char *)malloc(50);
FILM *m1=p;
FILM *m2;
FILM *m3;
FILM *m4;
while(flag)
{printf("1-按名字查找并修改 2-按类型查找并修改 3-退出修改\n");
scanf("%d",&n);
switch(n)
{ case 1:
printf("请输入要修改的电影名称: ");
scanf("%s",n1);
m2=Nsearch(m1,n1);
//Display1(m2);break;//测试
if(m2==NULL)
break;
else
{printf("修改电影名称: \n");
scanf("%s",m2->Name);
printf("修改电影的导演: \n");
scanf("%s",m2->Director);
printf("修改电影的编辑: \n");
scanf("%s",m2->Edit);
printf("修改电影的主演: \n");
scanf("%s",m2->Actor);
printf("修改电影的类型: \n");
scanf("%s",m2->Type);
printf("修改电影的制作国家/地区: \n");
scanf("%s",m2->Prodct);
printf("修改电影的语言: \n");
scanf("%s",m2->Language);
printf("修改电影的上映时间: \n");
scanf("%s",m2->Release);
printf("修改电影的时长: \n");
scanf("%s",m2->Length);
printf("修改电影的简介: \n");
scanf("%s",m2->Introduction);
printf("修改电影的评价星级: \n");
scanf("%f",&m2->Star);
break;
}
case 2:
printf("请输入要修改的电影类型: ");
scanf("%s",t1);
m2=Tsearch(m1,t1);
if(m2==NULL)
break;
else
{printf("符合该类型的电影如下:\n");
Displayall(m2);
m2=m2->Next;
while(m2!=NULL)
{m3=Nsearch(m1,m2->Name);
printf("请修改%s\n", m2->Name);
printf("\n");
printf("修改电影名称: \n");
scanf("%s",m3->Name);
printf("修改电影的导演: \n");
scanf("%s",m3->Director);
printf("修改电影的编辑: \n");
scanf("%s",m3->Edit);
printf("修改电影的主演: \n");
scanf("%s",m3->Actor);
printf("修改电影的类型: \n");
scanf("%s",m3->Type);
printf("修改电影的制作国家/地区: \n");
scanf("%s",m3->Prodct);
printf("修改电影的语言: \n");
scanf("%s",m3->Language);
printf("修改电影的上映时间: \n");
scanf("%s",m3->Release);
printf("修改电影的时长: \n");
scanf("%s",m3->Length);
printf("修改电影的简介: \n");
scanf("%s",m3->Introduction);
printf("修改电影的评价星级: \n");
scanf("%f",&m3->Star);
m2=m2->Next;
}
}break;
case 3:flag=0;break;
default:printf("输入错误,请重新选择\n");getchar();break;
}
}
return p;
}
FILM *Delete(FILM *p)
{char *n1=(char *)malloc(50);
FILM *m1=p;
FILM *m2;
printf("请输入要删除的电影名称: ");
scanf("%s",n1);
while(m1->Next!=NULL)
{if(strcmp(m1->Next->Name,n1))
m1=m1->Next;
else
{ m1->Next=m1->Next->Next;
return p;
}
}
printf("信息库没有这部电影,无法删除\n");
return NULL;
}
你是否还在寻找稳定的海外服务器提供商?创新互联www.cdcxhl.cn海外机房具备T级流量清洗系统配攻击溯源,准确流量调度确保服务器高可用性,企业级服务器适合批量采购,新人活动首月15元起,快前往官网查看详情吧