老師布置的一個(gè)項(xiàng)目,我打算用單鏈表去實(shí)現(xiàn)它,有相似的同學(xué)在這里可以提供一個(gè)思路,技術(shù)不精,還望海涵。
項(xiàng)目名稱:影視作品收錄系統(tǒng)
要求:
1.設(shè)計(jì)一個(gè)結(jié)構(gòu)體用來(lái)表示作品信息,有影視作品名稱,導(dǎo)演,編輯,主演,類型,制片國(guó)家/地區(qū),語(yǔ)言,上映日期,片長(zhǎng),簡(jiǎn)介,評(píng)價(jià)星級(jí)等信息。
2.制作菜單可供用戶選擇使用,分為管理員賬戶與普通賬戶。
管理員賬戶可以添加作品、下架作品,修改作品,按名稱查詢,按類型查詢以及顯示所有作品;普通賬戶只能按名稱查詢,按類型查詢和顯示所有作品信息。
3.管理員賬戶可以根據(jù)影視作品的名稱、類型修改作品信息。
4.初始默認(rèn)狀態(tài)有10部作品。
typedef struct movie //一部電影的信息
{char *Name; //名稱
char *Director; //導(dǎo)演
char *Edit; //編輯
char *Actor; //主演
char *Type; //類型
char *Prodct; //制品國(guó)家/區(qū)域
char *Language; //語(yǔ)言
char *Release; //上映
char *Length; //片長(zhǎng)
char *Introduction; //簡(jiǎn)介
float Star; //評(píng)價(jià)星級(jí)
struct movie *Next; //指向下一部電影存放的位置
}FILM;
2.給節(jié)點(diǎn)開辟空間FILM *Space(FILM *p)
{p = (FILM *)malloc(sizeof(FILM));
p->Name=(char *)malloc(50); //電影名稱
p->Director=(char *)malloc(50); //電影導(dǎo)演
p->Edit=(char *)malloc(100); //電影編劇
p->Actor=(char *)malloc(100); //電影主演
p->Type=(char *)malloc(100); //電影類型
p->Prodct=(char *)malloc(20); //制作國(guó)家/地區(qū)
p->Language=(char *)malloc(30); //語(yǔ)言
p->Release=(char *)malloc(100); //上映時(shí)間
p->Length=(char *)malloc(60); //電影時(shí)長(zhǎng)
p->Introduction=(char *)malloc(2000); //電影簡(jiǎn)介
p->Next=NULL;
return p;
}
3.初始化鏈表用txt文檔的內(nèi)容作初始化
int check(const char *f)//檢查存放作品的文檔在不在 參數(shù)是argv[1].
{FILE *f1;
f1=fopen(f,"r+");//文檔必須存在
if(f1==NULL)
return 0;
else
return 1;
}
FILM *Init(const char *p,int a)//參數(shù):argv[1]和check函數(shù)返回值
{if(a==0)
{printf("影視信息庫(kù)不存在!\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("影視信息庫(kù)打開失敗\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)//參數(shù):鏈表首元節(jié)點(diǎn)(也就是第一個(gè)空的那個(gè))
{ //還有就是要查找的作品名稱
FILM *m2=p->Next;
while(m2!=NULL&&strcmp(m2->Name,n))
m2=m2->Next;
if (m2==NULL)
{printf("Sorry,信息庫(kù)并沒(méi)有這部電影\n");
return NULL;
}
else
return m2;
}
5.按類型查找作品FILM *Tsearch(FILM *p,char *t)//參數(shù):鏈表首元節(jié)點(diǎn)和要查找的作品類型
{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("信息庫(kù)并沒(méi)有這個(gè)類型的電影\n");
return head;
}
else
return head;
}
6.添加作品FILM *Addflim(FILM *p)//參數(shù)是鏈表首元節(jié)點(diǎn)
{int n; //添加電影數(shù)量
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("請(qǐng)輸入新電影的名字: \n");
scanf("%s",new->Name);
printf("請(qǐng)輸入新電影的導(dǎo)演: \n");
scanf("%s",new->Director);
printf("請(qǐng)輸入新電影的編輯: \n");
scanf("%s",new->Edit);
printf("請(qǐng)輸入新電影的主演: \n");
scanf("%s",new->Actor);
printf("請(qǐng)輸入新電影的類型: \n");
scanf("%s",new->Type);
printf("請(qǐng)輸入新電影的制作國(guó)家/地區(qū): \n");
scanf("%s",new->Prodct);
printf("請(qǐng)輸入新電影的語(yǔ)言: \n");
scanf("%s",new->Language);
printf("請(qǐng)輸入新電影的上映時(shí)間: \n");
scanf("%s",new->Release);
printf("請(qǐng)輸入新電影的時(shí)長(zhǎng): \n");
scanf("%s",new->Length);
printf("請(qǐng)輸入新電影的簡(jiǎn)介: \n");
scanf("%s",new->Introduction);
printf("請(qǐng)輸入新電影的評(píng)價(jià)星級(jí): \n");
scanf("%f",&new->Star);
tial->Next=new;
tial=new;
}
return p;
}
7.修改作品FILM *Modify(FILM *p)//參數(shù)鏈表首元節(jié)點(diǎn)
{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("請(qǐng)輸入要修改的電影名稱: ");
scanf("%s",n1);
m2=Nsearch(m1,n1);
//Display1(m2);break;//測(cè)試
if(m2==NULL)
break;
else
{printf("修改電影名稱: \n");
scanf("%s",m2->Name);
printf("修改電影的導(dǎo)演: \n");
scanf("%s",m2->Director);
printf("修改電影的編輯: \n");
scanf("%s",m2->Edit);
printf("修改電影的主演: \n");
scanf("%s",m2->Actor);
printf("修改電影的類型: \n");
scanf("%s",m2->Type);
printf("修改電影的制作國(guó)家/地區(qū): \n");
scanf("%s",m2->Prodct);
printf("修改電影的語(yǔ)言: \n");
scanf("%s",m2->Language);
printf("修改電影的上映時(shí)間: \n");
scanf("%s",m2->Release);
printf("修改電影的時(shí)長(zhǎng): \n");
scanf("%s",m2->Length);
printf("修改電影的簡(jiǎn)介: \n");
scanf("%s",m2->Introduction);
printf("修改電影的評(píng)價(jià)星級(jí): \n");
scanf("%f",&m2->Star);
break;
}
case 2:
printf("請(qǐng)輸入要修改的電影類型: ");
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("請(qǐng)修改%s\n", m2->Name);
printf("\n");
printf("修改電影名稱: \n");
scanf("%s",m3->Name);
printf("修改電影的導(dǎo)演: \n");
scanf("%s",m3->Director);
printf("修改電影的編輯: \n");
scanf("%s",m3->Edit);
printf("修改電影的主演: \n");
scanf("%s",m3->Actor);
printf("修改電影的類型: \n");
scanf("%s",m3->Type);
printf("修改電影的制作國(guó)家/地區(qū): \n");
scanf("%s",m3->Prodct);
printf("修改電影的語(yǔ)言: \n");
scanf("%s",m3->Language);
printf("修改電影的上映時(shí)間: \n");
scanf("%s",m3->Release);
printf("修改電影的時(shí)長(zhǎng): \n");
scanf("%s",m3->Length);
printf("修改電影的簡(jiǎn)介: \n");
scanf("%s",m3->Introduction);
printf("修改電影的評(píng)價(jià)星級(jí): \n");
scanf("%f",&m3->Star);
m2=m2->Next;
}
}break;
case 3:flag=0;break;
default:printf("輸入錯(cuò)誤,請(qǐng)重新選擇\n");getchar();break;
}
}
return p;
}
8.下架作品FILM *Delete(FILM *p)//參數(shù):鏈表首元節(jié)點(diǎn)
{char *n1=(char *)malloc(50);
FILM *m1=p;
FILM *m2;
printf("請(qǐng)輸入要?jiǎng)h除的電影名稱: ");
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("信息庫(kù)沒(méi)有這部電影,無(wú)法刪除\n");
return NULL;
}
9.顯示所有作品void Displayall(FILM *p)//參數(shù):鏈表首元節(jié)點(diǎn)
{FILM *m1=p->Next;
while(m1!=NULL)
{printf("\n電影名稱:%s\n", m1->Name);
printf("電影導(dǎo)演:%s\n", m1->Director);
printf("電影編劇:%s\n", m1->Edit);
printf("電影主演:%s\n", m1->Actor);
printf("電影類型:%s\n", m1->Type);
printf("制作國(guó)家/地區(qū):%s\n", m1->Prodct);
printf("語(yǔ)言:%s\n", m1->Language);
printf("上映時(shí)間:%s\n", m1->Release);
printf("電影時(shí)長(zhǎng):%s\n", m1->Length);
printf("電影簡(jiǎn)介:%s\n", m1->Introduction);
printf("評(píng)價(jià)星級(jí):%.1f\n", m1->Star);
printf("\n");
m1=m1->Next;
}
}
10.只顯示一部作品void Display1(FILM *p)//參數(shù):按名稱找到的節(jié)點(diǎn)位置
{FILM *m1=p;
printf("\n電影名稱:%s\n", m1->Name);
printf("電影導(dǎo)演:%s\n", m1->Director);
printf("電影編劇:%s\n", m1->Edit);
printf("電影主演:%s\n", m1->Actor);
printf("電影類型:%s\n", m1->Type);
printf("制作國(guó)家/地區(qū):%s\n", m1->Prodct);
printf("語(yǔ)言:%s\n", m1->Language);
printf("上映時(shí)間:%s\n", m1->Release);
printf("電影時(shí)長(zhǎng):%s\n", m1->Length);
printf("電影簡(jiǎn)介:%s\n", m1->Introduction);
printf("評(píng)價(jià)星級(jí):%.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("請(qǐng)輸入想看的電影名稱: ");
scanf("%s",n1);
m1=Nsearch(m2,n1);
if(m1==NULL)
break;
else
{Display1(m1);
break;
}
case 3:
printf("請(qǐng)輸入想看的電影類型: ");
scanf("%s",t1);
m3=Tsearch(m2,t1);
if(m3==NULL)
break;
else
{Displayall(m3);
break;
}
case 4:flag=0;break;
default:printf("輸入錯(cuò)誤,請(qǐng)重新輸入\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; //退出管理員模式標(biāo)志
int n; //管理員功能選擇
FILM *m1; //按名稱查找電影
FILM *m2=p; //函數(shù)傳參
FILM *m3; //按類型查找電影
FILM *m4=p; //改變電影庫(kù)前
FILM *m5; //改變電影庫(kù)后
printf("請(qǐng)輸入管理員密碼: ");
scanf("%s",mima);
while(strcmp(mima,password))
{printf("密碼錯(cuò)誤,請(qǐng)重新輸入: ");
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("請(qǐng)輸入查找的電影名稱: ");
scanf("%s",n1);
m1=Nsearch(m2,n1);
if(m1==NULL)
break;
else
{Display1(m1);
break;
}
case 6:
printf("請(qǐng)輸入查找的電影類型: ");
scanf("%s",t1);
m3=Tsearch(m2,t1);
if(m3==NULL)
break;
else
{Displayall(m3);
break;
}
case 7:flag=0;break;
default:printf("輸入錯(cuò)誤,請(qǐng)重新選擇\n");getchar();break;
}
}
}
}
先用文件操作對(duì)單鏈表初始化,單鏈表儲(chǔ)存數(shù)據(jù),每次傳參時(shí)都傳遞鏈表的首元節(jié)點(diǎn),便于理解和操作。
缺陷:退出系統(tǒng)后全部恢復(fù)默認(rèn)狀態(tài),無(wú)法更新數(shù)據(jù)庫(kù)。(c語(yǔ)言fprintf函數(shù)不支持中文等多字節(jié)數(shù)據(jù),漢字的文本操作還不會(huì))
由于是初學(xué)者,一些地方可能寫的不好,希望大家多多包涵,也祝愿大家共同進(jìn)步。
#include#include#includetypedef struct movie //一部電影的信息
{char *Name; //名稱
char *Director; //導(dǎo)演
char *Edit; //編輯
char *Actor; //主演
char *Type; //類型
char *Prodct; //制品國(guó)家/區(qū)域
char *Language; //語(yǔ)言
char *Release; //上映
char *Length; //片長(zhǎng)
char *Introduction; //簡(jiǎn)介
float Star; //評(píng)價(jià)星級(jí)
struct movie *Next; //指向下一部電影存放的位置
}FILM;
FILM *Init(const char *p,int a); //使用文件操作對(duì)進(jìn)行鏈表初始化
FILM *Space(FILM *p); //為鏈表的節(jié)點(diǎn)申請(qǐng)空間
int check(const char *f); //檢查庫(kù)文件
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; //結(jié)束收錄系統(tǒng)標(biāo)志
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("感謝你的使用,歡迎下次再來(lái)\n");flag=0;break;
default:printf("您的輸入存在錯(cuò)誤,請(qǐng)重新輸入\n");break;
}
}
return 0;
}
int check(const char *f)
{FILE *f1;
f1=fopen(f,"r+"); //庫(kù)文件必須存在
if(f1==NULL)
return 0;
else
return 1;
}
FILM *Init(const char *p,int a)
{if(a==0)
{printf("影視信息庫(kù)不存在!\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("影視信息庫(kù)打開失敗\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); //電影導(dǎo)演
p->Edit=(char *)malloc(100); //電影編劇
p->Actor=(char *)malloc(100); //電影主演
p->Type=(char *)malloc(100); //電影類型
p->Prodct=(char *)malloc(20); //制作國(guó)家/地區(qū)
p->Language=(char *)malloc(30); //語(yǔ)言
p->Release=(char *)malloc(100); //上映時(shí)間
p->Length=(char *)malloc(60); //電影時(shí)長(zhǎng)
p->Introduction=(char *)malloc(2000); //電影簡(jiǎn)介
p->Next=NULL;
return p;
}
void Displayall(FILM *p)
{FILM *m1=p->Next;
while(m1!=NULL)
{printf("\n電影名稱:%s\n", m1->Name);
printf("電影導(dǎo)演:%s\n", m1->Director);
printf("電影編劇:%s\n", m1->Edit);
printf("電影主演:%s\n", m1->Actor);
printf("電影類型:%s\n", m1->Type);
printf("制作國(guó)家/地區(qū):%s\n", m1->Prodct);
printf("語(yǔ)言:%s\n", m1->Language);
printf("上映時(shí)間:%s\n", m1->Release);
printf("電影時(shí)長(zhǎng):%s\n", m1->Length);
printf("電影簡(jiǎn)介:%s\n", m1->Introduction);
printf("評(píng)價(jià)星級(jí):%.1f\n", m1->Star);
printf("\n");
m1=m1->Next;
}
}
void Display1(FILM *p)
{FILM *m1=p;
printf("\n電影名稱:%s\n", m1->Name);
printf("電影導(dǎo)演:%s\n", m1->Director);
printf("電影編劇:%s\n", m1->Edit);
printf("電影主演:%s\n", m1->Actor);
printf("電影類型:%s\n", m1->Type);
printf("制作國(guó)家/地區(qū):%s\n", m1->Prodct);
printf("語(yǔ)言:%s\n", m1->Language);
printf("上映時(shí)間:%s\n", m1->Release);
printf("電影時(shí)長(zhǎng):%s\n", m1->Length);
printf("電影簡(jiǎn)介:%s\n", m1->Introduction);
printf("評(píng)價(jià)星級(jí):%.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("請(qǐng)輸入想看的電影名稱: ");
scanf("%s",n1);
m1=Nsearch(m2,n1);
if(m1==NULL)
break;
else
{Display1(m1);
break;
}
case 3:
printf("請(qǐng)輸入想看的電影類型: ");
scanf("%s",t1);
m3=Tsearch(m2,t1);
if(m3==NULL)
break;
else
{Displayall(m3);
break;
}
case 4:flag=0;break;
default:printf("輸入錯(cuò)誤,請(qǐng)重新輸入\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; //退出管理員模式標(biāo)志
int n; //管理員功能選擇
FILM *m1; //按名稱查找電影
FILM *m2=p; //函數(shù)傳參
FILM *m3; //按類型查找電影
FILM *m4=p; //改變電影庫(kù)前
FILM *m5; //改變電影庫(kù)后
printf("請(qǐng)輸入管理員密碼: ");
scanf("%s",mima);
while(strcmp(mima,password))
{printf("密碼錯(cuò)誤,請(qǐng)重新輸入: ");
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("請(qǐng)輸入查找的電影名稱: ");
scanf("%s",n1);
m1=Nsearch(m2,n1);
if(m1==NULL)
break;
else
{Display1(m1);
break;
}
case 6:
printf("請(qǐng)輸入想看的電影類型: ");
scanf("%s",t1);
m3=Tsearch(m2,t1);
if(m3==NULL)
break;
else
{Displayall(m3);
break;
}
case 7:flag=0;break;
default:printf("輸入錯(cuò)誤,請(qǐng)重新選擇\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,信息庫(kù)并沒(méi)有這部電影\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("信息庫(kù)并沒(méi)有這個(gè)類型的電影\n");
return head;
}
else
return head;
}
FILM *Addflim(FILM *p)
{int n; //添加電影數(shù)量
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("請(qǐng)輸入新電影的名字: \n");
scanf("%s",new->Name);
printf("請(qǐng)輸入新電影的導(dǎo)演: \n");
scanf("%s",new->Director);
printf("請(qǐng)輸入新電影的編輯: \n");
scanf("%s",new->Edit);
printf("請(qǐng)輸入新電影的主演: \n");
scanf("%s",new->Actor);
printf("請(qǐng)輸入新電影的類型: \n");
scanf("%s",new->Type);
printf("請(qǐng)輸入新電影的制作國(guó)家/地區(qū): \n");
scanf("%s",new->Prodct);
printf("請(qǐng)輸入新電影的語(yǔ)言: \n");
scanf("%s",new->Language);
printf("請(qǐng)輸入新電影的上映時(shí)間: \n");
scanf("%s",new->Release);
printf("請(qǐng)輸入新電影的時(shí)長(zhǎng): \n");
scanf("%s",new->Length);
printf("請(qǐng)輸入新電影的簡(jiǎn)介: \n");
scanf("%s",new->Introduction);
printf("請(qǐng)輸入新電影的評(píng)價(jià)星級(jí): \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("請(qǐng)輸入要修改的電影名稱: ");
scanf("%s",n1);
m2=Nsearch(m1,n1);
//Display1(m2);break;//測(cè)試
if(m2==NULL)
break;
else
{printf("修改電影名稱: \n");
scanf("%s",m2->Name);
printf("修改電影的導(dǎo)演: \n");
scanf("%s",m2->Director);
printf("修改電影的編輯: \n");
scanf("%s",m2->Edit);
printf("修改電影的主演: \n");
scanf("%s",m2->Actor);
printf("修改電影的類型: \n");
scanf("%s",m2->Type);
printf("修改電影的制作國(guó)家/地區(qū): \n");
scanf("%s",m2->Prodct);
printf("修改電影的語(yǔ)言: \n");
scanf("%s",m2->Language);
printf("修改電影的上映時(shí)間: \n");
scanf("%s",m2->Release);
printf("修改電影的時(shí)長(zhǎng): \n");
scanf("%s",m2->Length);
printf("修改電影的簡(jiǎn)介: \n");
scanf("%s",m2->Introduction);
printf("修改電影的評(píng)價(jià)星級(jí): \n");
scanf("%f",&m2->Star);
break;
}
case 2:
printf("請(qǐng)輸入要修改的電影類型: ");
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("請(qǐng)修改%s\n", m2->Name);
printf("\n");
printf("修改電影名稱: \n");
scanf("%s",m3->Name);
printf("修改電影的導(dǎo)演: \n");
scanf("%s",m3->Director);
printf("修改電影的編輯: \n");
scanf("%s",m3->Edit);
printf("修改電影的主演: \n");
scanf("%s",m3->Actor);
printf("修改電影的類型: \n");
scanf("%s",m3->Type);
printf("修改電影的制作國(guó)家/地區(qū): \n");
scanf("%s",m3->Prodct);
printf("修改電影的語(yǔ)言: \n");
scanf("%s",m3->Language);
printf("修改電影的上映時(shí)間: \n");
scanf("%s",m3->Release);
printf("修改電影的時(shí)長(zhǎng): \n");
scanf("%s",m3->Length);
printf("修改電影的簡(jiǎn)介: \n");
scanf("%s",m3->Introduction);
printf("修改電影的評(píng)價(jià)星級(jí): \n");
scanf("%f",&m3->Star);
m2=m2->Next;
}
}break;
case 3:flag=0;break;
default:printf("輸入錯(cuò)誤,請(qǐng)重新選擇\n");getchar();break;
}
}
return p;
}
FILM *Delete(FILM *p)
{char *n1=(char *)malloc(50);
FILM *m1=p;
FILM *m2;
printf("請(qǐng)輸入要?jiǎng)h除的電影名稱: ");
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("信息庫(kù)沒(méi)有這部電影,無(wú)法刪除\n");
return NULL;
}
你是否還在尋找穩(wěn)定的海外服務(wù)器提供商?創(chuàng)新互聯(lián)www.cdcxhl.cn海外機(jī)房具備T級(jí)流量清洗系統(tǒng)配攻擊溯源,準(zhǔn)確流量調(diào)度確保服務(wù)器高可用性,企業(yè)級(jí)服務(wù)器適合批量采購(gòu),新人活動(dòng)首月15元起,快前往官網(wǎng)查看詳情吧