c語言單鏈表實現(xiàn)一個簡單收錄系統(tǒng)-創(chuàng)新互聯(lián)

文章目錄
  • 前言
  • 一、項目說明
  • 二、實現(xiàn)步驟
    • 1.構(gòu)建鏈表節(jié)點
    • 2.給節(jié)點開辟空間
    • 3.初始化鏈表
    • 4.按名字查找作品
    • 5.按類型查找作品
    • 6.添加作品
    • 7.修改作品
    • 8.下架作品
    • 9.顯示所有作品
    • 10.只顯示一部作品
    • 11.普通賬戶菜單
    • 12.管理員賬戶菜單
  • 總結(jié)
  • 程序源代碼

創(chuàng)新互聯(lián)秉承實現(xiàn)全網(wǎng)價值營銷的理念,以專業(yè)定制企業(yè)官網(wǎng),網(wǎng)站設(shè)計、做網(wǎng)站,重慶小程序開發(fā),網(wǎng)頁設(shè)計制作,手機(jī)網(wǎng)站制作成都全網(wǎng)營銷幫助傳統(tǒng)企業(yè)實現(xiàn)“互聯(lián)網(wǎng)+”轉(zhuǎn)型升級專業(yè)定制企業(yè)官網(wǎng),公司注重人才、技術(shù)和管理,匯聚了一批優(yōu)秀的互聯(lián)網(wǎng)技術(shù)人才,對客戶都以感恩的心態(tài)奉獻(xiàn)自己的專業(yè)和所長。
前言

老師布置的一個項目,我打算用單鏈表去實現(xiàn)它,有相似的同學(xué)在這里可以提供一個思路,技術(shù)不精,還望海涵。


一、項目說明

項目名稱:影視作品收錄系統(tǒng)
要求:
1.設(shè)計一個結(jié)構(gòu)體用來表示作品信息,有影視作品名稱,導(dǎo)演,編輯,主演,類型,制片國家/地區(qū),語言,上映日期,片長,簡介,評價星級等信息。
2.制作菜單可供用戶選擇使用,分為管理員賬戶與普通賬戶。
管理員賬戶可以添加作品、下架作品,修改作品,按名稱查詢,按類型查詢以及顯示所有作品;普通賬戶只能按名稱查詢,按類型查詢和顯示所有作品信息。
3.管理員賬戶可以根據(jù)影視作品的名稱、類型修改作品信息。
4.初始默認(rèn)狀態(tài)有10部作品。

二、實現(xiàn)步驟 1.構(gòu)建鏈表節(jié)點
typedef struct movie		//一部電影的信息
{char *Name;				//名稱
	char *Director;			//導(dǎo)演
	char *Edit;				//編輯
	char *Actor;			//主演
	char *Type;				//類型
	char *Prodct;			//制品國家/區(qū)域
	char *Language;			//語言
	char *Release;			//上映
	char *Length;			//片長
	char *Introduction;		//簡介
	float Star;				//評價星級
	struct movie *Next;		//指向下一部電影存放的位置
}FILM;
2.給節(jié)點開辟空間
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);			//制作國家/地區(qū)
	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文檔的內(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("影視信息庫不存在!\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)//參數(shù):鏈表首元節(jié)點(也就是第一個空的那個)
{	  //還有就是要查找的作品名稱
	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)//參數(shù):鏈表首元節(jié)點和要查找的作品類型
{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)//參數(shù)是鏈表首元節(jié)點
{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("請輸入新電影的名字: \n");
		scanf("%s",new->Name);
		printf("請輸入新電影的導(dǎo)演: \n");
		scanf("%s",new->Director);
		printf("請輸入新電影的編輯: \n");
		scanf("%s",new->Edit);
		printf("請輸入新電影的主演: \n");
		scanf("%s",new->Actor);
		printf("請輸入新電影的類型: \n");
		scanf("%s",new->Type);
		printf("請輸入新電影的制作國家/地區(qū): \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)//參數(shù)鏈表首元節(jié)點
{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("修改電影的導(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("修改電影的制作國家/地區(qū): \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("修改電影的導(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("修改電影的制作國家/地區(qū): \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)//參數(shù):鏈表首元節(jié)點
{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)//參數(shù):鏈表首元節(jié)點
{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("制作國家/地區(qū):%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)//參數(shù):按名稱找到的節(jié)點位置
{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("制作國家/地區(qū):%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;							//退出管理員模式標(biāo)志
	int n;								//管理員功能選擇

	FILM *m1;							//按名稱查找電影
	FILM *m2=p;							//函數(shù)傳參
	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;
			}
		}
	}
}

總結(jié)

先用文件操作對單鏈表初始化,單鏈表儲存數(shù)據(jù),每次傳參時都傳遞鏈表的首元節(jié)點,便于理解和操作。
缺陷:退出系統(tǒng)后全部恢復(fù)默認(rèn)狀態(tài),無法更新數(shù)據(jù)庫。(c語言fprintf函數(shù)不支持中文等多字節(jié)數(shù)據(jù),漢字的文本操作還不會)
由于是初學(xué)者,一些地方可能寫的不好,希望大家多多包涵,也祝愿大家共同進(jìn)步。

程序源代碼
#include#include#includetypedef struct movie		//一部電影的信息
{char *Name;				//名稱
	char *Director;			//導(dǎo)演
	char *Edit;				//編輯
	char *Actor;			//主演
	char *Type;				//類型
	char *Prodct;			//制品國家/區(qū)域
	char *Language;			//語言
	char *Release;			//上映
	char *Length;			//片長
	char *Introduction;		//簡介
	float Star;				//評價星級
	struct movie *Next;		//指向下一部電影存放的位置
}FILM;

FILM *Init(const char *p,int a);	//使用文件操作對進(jìn)行鏈表初始化
FILM *Space(FILM *p);				//為鏈表的節(jié)點申請空間
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;			//結(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("感謝你的使用,歡迎下次再來\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);			//電影導(dǎo)演
	p->Edit=(char *)malloc(100);			//電影編劇
	p->Actor=(char *)malloc(100);			//電影主演
	p->Type=(char *)malloc(100);			//電影類型
	p->Prodct=(char *)malloc(20);			//制作國家/地區(qū)
	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("電影導(dǎo)演:%s\n", m1->Director);
		printf("電影編劇:%s\n", m1->Edit);
		printf("電影主演:%s\n", m1->Actor);
		printf("電影類型:%s\n", m1->Type);
		printf("制作國家/地區(qū):%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("電影導(dǎo)演:%s\n", m1->Director);
	printf("電影編劇:%s\n", m1->Edit);
	printf("電影主演:%s\n", m1->Actor);
	printf("電影類型:%s\n", m1->Type);
	printf("制作國家/地區(qū):%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;							//退出管理員模式標(biāo)志
	int n;								//管理員功能選擇

	FILM *m1;							//按名稱查找電影
	FILM *m2=p;							//函數(shù)傳參
	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;			//添加電影數(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("請輸入新電影的名字: \n");
		scanf("%s",new->Name);
		printf("請輸入新電影的導(dǎo)演: \n");
		scanf("%s",new->Director);
		printf("請輸入新電影的編輯: \n");
		scanf("%s",new->Edit);
		printf("請輸入新電影的主演: \n");
		scanf("%s",new->Actor);
		printf("請輸入新電影的類型: \n");
		scanf("%s",new->Type);
		printf("請輸入新電影的制作國家/地區(qū): \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("修改電影的導(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("修改電影的制作國家/地區(qū): \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("修改電影的導(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("修改電影的制作國家/地區(qū): \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;
}

你是否還在尋找穩(wěn)定的海外服務(wù)器提供商?創(chuàng)新互聯(lián)www.cdcxhl.cn海外機(jī)房具備T級流量清洗系統(tǒng)配攻擊溯源,準(zhǔn)確流量調(diào)度確保服務(wù)器高可用性,企業(yè)級服務(wù)器適合批量采購,新人活動首月15元起,快前往官網(wǎng)查看詳情吧

本文標(biāo)題:c語言單鏈表實現(xiàn)一個簡單收錄系統(tǒng)-創(chuàng)新互聯(lián)
網(wǎng)站地址:http://bm7419.com/article2/dpohoc.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供品牌網(wǎng)站設(shè)計、App設(shè)計品牌網(wǎng)站建設(shè)、軟件開發(fā)網(wǎng)站改版、企業(yè)建站

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

成都做網(wǎng)站