C语言课设:影片管理系统

在接触并学习C语言之后,往往需要做一个简单的课设系统完成对C语言的学习。当然,这可能是我们接触代码以来写过的最长的代码,不排除对新手有一定难度。由于之前笔者划水了一段时间,导致一些知识遗忘了,所以只得花一些时间去复习知识,这也直接导致后期笔者写课设的时间不足(好像花了三天),只写了一些必要的功能,算是一次遗憾了。(课设提交之后,笔者出于懒惰,就不想继续完善了,哈哈)
不过笔者虽然没有完善代码,但骨干不缺,对新手比较友好,上手不难,可直接避免一些冗长且不懂的部分,完成任务。重剑无锋,大巧不工
系统基本要求:
1.数据录入:用数组或链表。
2.数据存储:用文件的形式操作。
3.数据读写:对文件中的数据进行读写。
4.数据修改:对旧数据进行修改。
5.数据插入:将新数据插入到数组或链表中。
6.数据删除:对旧数据进行删除。
7.数据查询:两个简单查询和一个组合查询。
8.数据统计:含简单统计和综合统计。
9.数据排序:升序和降序。
10.数据报表:依据规定的格式报表输出。
11.界面:设计总体菜单界面。
附加:
注册,登录部分(设置密码的隐式输出,简单的加密解密)
下面这是笔者的代码:

#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include<io.h>
#include<ctype.h>
#include<windows.h>
#define change 3

typedef struct node
{
    int id;     //影片的id,(方便录入)
    char name[20];      //影片名称
    int time;       //影片上映时间,仅年,如:2021
    char country[20];       //影片发行国家
    double earning;     //该影片的票房收入,精确到百分位,单位亿
    struct node *next;  //next指针指向本结构体
}Node,*linklist;
//用于存储影片信息的节点

typedef struct accout
{
	char pass[20];
	char name[20];
	struct accout *next;
}Accout,*pAccout;
//用于登录的结构体

linklist init()
{
    linklist head = (linklist)malloc(sizeof(Node));
    head->next = NULL;
    return head;
}
//初始化链表的函数


void save_inf(linklist head)
{
    FILE *fp;
    //char filename[30];
    linklist user;
    //printf("\n请输入要保存的文件名:\n");
    //scanf("%s",filename);
    fp=fopen("C:\\Users\\Desktop\\C语言课设\\000.txt","wt");	//完整的文件路径名,或者用上方注释的方法创立文件
    if(fp==NULL)
    {
        printf("写文件出错,按任意键退出!\n");
        getch();
        exit(1);
    }
    for(user=head->next;user!=NULL;user=user->next)
    {
        fprintf(fp,"%d  %s  %d  %s  %lf\n",user->id,user->name,user->time,user->country,user->earning);
    }
    printf("\n文件已成功保存,按任意键返回!\n");
    getch();
    fclose(fp);
}
//将链表中的信息保存到指定文件中

linklist read_inf()
{
    linklist head,r,user;
    FILE *fp;
    //char filename[30];
    //printf("\n请输入要打开的文件名:");
    //scanf("%s",filename);
    fp=fopen("C:\\Users\\Desktop\\C语言课设\\000.txt","rt");
    if(fp==NULL)
    {
        printf("读文件出错,按任意键退出!\n");
        getch();
        exit(1);
    }
    head=(linklist)malloc(sizeof(Node));
    head->next=NULL;
    r=head;
    while(!feof(fp))            //文件未结束
    {
        //开辟空间,以存放读取的信息
        user=(linklist)malloc(sizeof(Node));
        //存放读取信息
        fscanf(fp,"%d %s %d %s %lf\n",&user->id,user->name,&user->time,user->country,&user->earning);

        r->next=user;       //链接节点

        r=r->next;

    }
    r->next=NULL;
    fclose(fp);
    printf("\n文件中信息已正确读出,按任意键返回!\n");
    getch();
    return head;
}
//从指定文件中读取信息并存入链表中

void print_inf(linklist head)
{
    linklist pnode;
    pnode=(linklist)malloc(sizeof(Node));
    printf("\n所有影片信息为:\n");
    printf("影片id\t\t\t名称\t\t\t上映时间\t\t发行国\t\t票房收入\n");
    for(pnode=head->next;pnode!=NULL;pnode=pnode->next)
    {
        printf("----------------------------------------------------------------------------------------------------\n");
        printf("%d\t\t\t%-12s\t\t%d\t\t\t%s\t\t%lf\n",pnode->id,pnode->name,pnode->time,pnode->country,pnode->earning);

    }
}
//将链表中的信息打印输出

void type_in(linklist head)
{
    system("cls");
    linklist p=NULL;     //p指针用于遍历
    linklist temp;
    printf("\n\n\t◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆添 加 影 片 信 息◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆\n\n");
    printf("\t请输入影片整数编号(输入-1退出):\n\n");
    int ID;
    while(1)
    {
        scanf("%d",&ID);
        if(ID!=-1)
        {
            temp = (linklist)malloc(sizeof(Node));

            temp->id = ID;
            printf("\t分配给该影片的编号为:\t%d \n",ID);
            printf("\t输入影片名称:\t\t");
            scanf("%s",temp->name);
            printf("\t%s","输入影片发行国家:\t");
            scanf("%s",temp->country);
            printf("\t%s","输入影片上映时间:\t");
            scanf("%d",&temp->time);
            printf("\t输入影片票房收入:\t");
            scanf("\t%lf",&temp->earning);
            printf("\n\t-----------------------------------------------------------------------------------------\n");
            temp->next = NULL;       //新节点置空
            p=head;
            while(p->next)
                p=p->next;
                //遍历到链表尾处,将临时节点存放到链表尾
            p->next=temp;
            //temp->next=NULL;
        }
        else
        {
            break;
        }

    }
    save_inf(head);         //将链表存入文件中
    if(ID==-1)
    {
        system("cls");
        menu(head);
    }
}
//录入信息函数

void Find_1(linklist head)
{
    system("cls");
    printf("\n\n\n\t+++++++++++++++++++++++++++++++++++请 输 入 影 片 名:++++++++++++++++++++++++++++++++++++\n");
    printf("\n\t影片名:\t\t");
    char newname[20];
    scanf("%s",newname);
    linklist temp;
    int flag=0;
    printf("\n\n\n");
    printf("影片id\t\t\t名称\t\t\t上映时间\t\t发行国\t\t票房收入\n");
    for(temp=head->next;temp!=NULL;temp=temp->next)
    {
        if(strcmp(temp->name,newname)==0)
        {
            flag=1;
            printf("----------------------------------------------------------------------------------------------------\n");
            printf("%d\t\t\t%-12s\t\t%d\t\t\t%s\t\t%lf\n",temp->id,temp->name,temp->time,temp->country,temp->earning);
        }
    }
    if(flag==0)
    {
        printf("\n\n未找到该影片!\n");
    }

}
//查询影片信息(按影名查询)

void Find_2(linklist head)
{
    system("cls");
    printf("\n\n\n\t+++++++++++++++++++++++++++++请 输 入 影 片 发 行 时 间:+++++++++++++++++++++++++++++++\n");
    printf("\n发行时间:\t\t");
    int newtime;
    scanf("%d",&newtime);
    linklist temp;
    int flag=0;
    printf("\n\n\n");
    printf("影片id\t\t\t名称\t\t\t上映时间\t\t发行国\t\t票房收入\n");
    for(temp=head->next;temp!=NULL;temp=temp->next)
    {
        if(temp->time==newtime)
        {
            flag=1;
            printf("----------------------------------------------------------------------------------------------------\n");
            printf("%d\t\t\t%-12s\t\t%d\t\t\t%s\t\t%lf\n",temp->id,temp->name,temp->time,temp->country,temp->earning);
        }
    }
    if(flag==0)
        printf("\n\n未找到该影片!\n");

}
//查询影片信息(按上映时间查询)

void Find_3(linklist head)
{
    system("cls");
    int newtime;
    char newcountry[20];
    printf("\n\n\n\t+++++++++++++++++++++++++++++请 输 入 影 片 发 行 时 间:+++++++++++++++++++++++++++++++\n");
    printf("\t发行时间:\t");
    scanf("%d",&newtime);
    printf("\n\n\n\t+++++++++++++++++++++++++++++请 输 入 影 片 发 行 国 家:+++++++++++++++++++++++++++++++\n");
    printf("\t影片发行国家:\t");
    scanf("%s",newcountry);
    linklist temp;
    printf("\n\n\n");
    printf("影片id\t\t\t名称\t\t\t上映时间\t\t发行国\t\t票房收入\n");
    int flag=0;
    for(temp=head->next;temp!=NULL;temp=temp->next)
    {
        if(temp->time==newtime)
        {
            if(strcmp(temp->country,newcountry)==0)
            {
                flag=1;
            printf("----------------------------------------------------------------------------------------------------\n");
            printf("%d\t\t\t%-12s\t\t%d\t\t\t%s\t\t%lf\n",temp->id,temp->name,temp->time,temp->country,temp->earning);
            }
        }
    }
    if(flag==0)
        printf("\n\n未找到该影片!\n");

}
//查询影片信息(组合查询--时间,国家)

void CFind(linklist head)
{
    head=read_inf();
    system("cls");
    printf("\n\n\t◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆查 询 影 片 信 息◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆\n\n");
    printf("\t\t\t\t\t1-->按影名查询.\n");
    printf("\t-----------------------------------------------------------------------------------------\n");
    printf("\t\t\t\t\t2-->按上映时间查询.\n");
    printf("\t-----------------------------------------------------------------------------------------\n");
    printf("\t\t\t\t\t3-->按时间,国家查询.\n");
    printf("\t-----------------------------------------------------------------------------------------\n");
    printf("\t请输入(1~3):\n");
    int num;
    scanf("%d",&num);
    switch(num)
    {
        case 1:
            Find_1(head);  break;
        case 2:
            Find_2(head);  break;
        case 3:
            Find_3(head);  break;
    }
    system("pause");
    menu(head);
}
//查询后返回主菜单,保证能连续执行操作

void Change(linklist head)
{
    head=read_inf();
    system("cls");
    print_inf(head);
    printf("\n====================================================================================================\n");
    printf("\t请输入要修改的影片id:\n\n");
    int newid;
    scanf("%d",&newid);
    linklist temp;
    temp=(linklist)malloc(sizeof(Node));
    int flag=0;
    for(temp=head->next;temp!=NULL;temp=temp->next)
    {
        if(newid==temp->id)
        {
            flag=1;
            printf("\t影片名:\t\t%s\n",temp->name);
            printf("\t影片id:\t\t%d\n",temp->id);
            printf("\t影片上映时间:\t%d\n",temp->time);
            printf("\t影片发行国家:\t%s\n",temp->country);
            printf("\t影片票房:\t%lf\n",temp->earning);
            break;

        }
    }
    if(flag==0)
        printf("\n\n\t未找到该影片!\n");
    else
    {
        printf("----------------------------------------------------------------------------------------------------\n");
        printf("\t新影片名:\t");
        scanf("%s",temp->name);
        printf("\t新影片id:\t");
        scanf("%d",&temp->id);
        printf("\t新影片上映时间:");
        scanf("%d",&temp->time);
        printf("\t新影片发行国家:");
        scanf("%s",temp->country);
        printf("\t新影片票房:\t");
        scanf("%lf",&temp->earning);
        save_inf(head);         //更新修改后的数据并保存到文件中
    }

    menu(head);             //返回主菜单

}
//需要先用文件显示出所有影片的信息,再修改对应的影片

void Insert(linklist head)
{
    head=read_inf();
    system("cls");
    linklist ptr,pnode;           //ptr指针用于移动到链表尾,插入新节点
    ptr=head->next;
    while(ptr->next)
    {
        ptr=ptr->next;
    }                   //移动到链表尾部
    pnode=(linklist)malloc(sizeof(Node));
    printf("\n\n\t◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆增 加 影 片 信 息◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆\n\n");
    printf("\t影片名:\t");
    scanf("%s",pnode->name);
    printf("\t影片id:\t");
    scanf("%d",&pnode->id);
    printf("\t影片上映时间:\t");
    scanf("%d",&pnode->time);
    printf("\t影片发行国家:\t");
    scanf("%s",pnode->country);
    printf("\t影片票房:\t");
    scanf("%lf",&pnode->earning);
    pnode->next=NULL;
    ptr->next=pnode;
    getch();
    save_inf(head);
    menu(head);

}
//插入影片信息,从链表尾部插入

void Deletem(linklist head)
{
    head=read_inf();
    system("cls");
    print_inf(head);
    printf("\n\n==========请输入待删除的影片id:\n");
    int ID;
    scanf("%d",&ID);
    linklist p,q;
    p=head->next;
    q=NULL;           //用于标记待删除的节点的前后2个指针先全指向head
    while(p)          //当p非空时
    {
        //若p->id为ID
        if(p->id==ID)
        {
            // 1:中间节点或尾节点是ID,此时q!=NULL
            if(q)
                q->next=p->next;

            // 2:首节点是ID,此时q=NULL
            else
                head->next=p->next;        //直接将首节点后移
        }
        else
            q=p;        //若ID不为p->id,则q移动到p当前位置,相当于记录p前一个节点
        p=p->next;      //p指针移动到下一个节点
    }
    save_inf(head);     //保存删除后的链表
    menu(head);
}
//删除影片信息,先找到再删除

void Print(linklist head)
{
    head=read_inf();
    system("cls");
    print_inf(head);
    getch();
    menu(head);
}
//显示影片信息

void Statistics_1(linklist head)
{
    system("cls");
    printf("\n\n====================================================================================================\n");
    printf("\t\t影库中所有影片总数为:\n\n");
    int number=0;
    linklist pnode;
    for(pnode=head->next;pnode!=NULL;pnode=pnode->next)
        number++;
    printf("\t\t----->\t%d\n\n\n",number);
}
//对影片信息进行统计(对影片总数进行统计)

void Statistics_2(linklist head)
{
    system("cls");
    printf("\n\n====================================================================================================\n");
    printf("\t\t请输入待统计的国家:\n\n\t\t");
    char country[20];
    scanf("%s",country);
    int num=0;
    double price=0.0;
    linklist temp;
    temp=head->next;
    printf("\n\n\n");
    printf("影片id\t\t\t名称\t\t\t上映时间\t\t发行国\t\t票房收入\n");
    for(temp;temp!=NULL;temp=temp->next)
    {
        if(strcmp(temp->country,country)==0)
        {
            num++;
            price+=temp->earning;
            printf("----------------------------------------------------------------------------------------------------\n");
            printf("%d\t\t\t%-12s\t\t%d\t\t\t%s\t\t%lf\n",temp->id,temp->name,temp->time,temp->country,temp->earning);
        }
    }
     printf("====================================================================================================\n\n");
     printf("\t国家\t\t\t片数\t\t\t票房收入\n");
     printf("----------------------------------------------------------------------------------------------------\n");
    printf("\t%s\t\t\t%4d\t\t\t%4lf\n\n",country,num,price);
}
//对影片信息进行统计(统计单个国家的影片信息,数量及票房;总票房)

void Statistics(linklist head)
{
   head=read_inf();
   system("cls");
   printf("\t========请输入统计的类型:\n\n");
   printf("\t\t1-->统计影片总数\n\n");
   printf("\t\t2-->统计单个国家的影片信息,数量及票房;总票房\n\n");
   printf("\t\t请输入选项(1或2):\n");
   int figure;
   scanf("%d",&figure);
   switch(figure)
   {
       case 1:  Statistics_1(head);
            break;
       case 2:  Statistics_2(head);
            break;
   }
   printf("\n\n\t按任意键返回主菜单\n");
   getch();
   menu(head);
}
//统计信息的二级菜单

linklist DescendSort(linklist head)
{
    system("cls");
    linklist tempi=head->next;
    linklist tempj=NULL;
    Node temp;
    while(tempi)
    {
        tempj=tempi->next;
        while(tempj)
        {
            if(tempi->earning < tempj->earning)
            {
                temp=*tempi;
                *tempi=*tempj;
                *tempj=temp;
                temp.next=tempi->next;
                tempi->next=tempj->next;
                tempj->next=temp.next;
            }
            tempj = tempj->next;
        }
        tempi = tempi->next;
    }
    return head;
}
//按票房降序排列

linklist AscendSort(linklist head)
{
    system("cls");
    linklist tempi=head->next;
    linklist tempj=NULL;
    Node temp;
    while(tempi)
    {
        tempj=tempi->next;
        while(tempj)
        {
            if(tempi->time > tempj->time)
            {
                temp=*tempi;
                *tempi=*tempj;
                *tempj=temp;
                temp.next=tempi->next;
                tempi->next=tempj->next;
                tempj->next=temp.next;
            }
            tempj =tempj->next;
        }
        tempi=tempi->next;
    }


    return head;
}
//按上映时间升序排列

void Sort(linklist head)
{
    head=read_inf();
    system("cls");
    printf("\n\n\n====================================================================================================\n\n");
    printf("◆◆◆◆请选择排序类别:\n\n");
    printf("\t\t1-->按票房降序排列.\n\n");
    printf("\t\t2-->按上映时间升序排列.\n\n");
    printf("\t\t请选择序号(1~2):\n\n");
    int number;
    scanf("%d",&number);
    switch(number)
    {
        case 1:     DescendSort(head);
                    print_inf(head);
            break;
        case 2:     AscendSort(head);
                    print_inf(head);
            break;
    }
    printf("====================================================================================================\n\n\n");
    printf("\t按任意键返回主菜单!\n");
    getch();
    menu(head);
}
//排序的二级菜单

void Exit()
{
    system("cls");
    printf("谢谢使用!\n\n");
    printf("-------------------------------by CX.\n");
    getch();
}
//退出函数

void menu(linklist head)
{
    loop:
    system("cls");
	int figure;
    printf("\n\n\n"
    "\t■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■\n"
    "\t■**************************************************************************************■\n"
    "\t■\t\t\t          影 片 管 理 系 统 V1.2                                ■\n"
    "\t■**************************************************************************************■\n"
    "\t■\t\t\t           1->录入影片信息                                      ■\n"
    "\t■\t\t\t           2->查询影片信息                                      ■\n"
    "\t■\t\t\t           3->插入影片信息                                      ■\n"
    "\t■\t\t\t           4->修改影片信息                                      ■\n"
    "\t■\t\t\t           5->删除影片信息                                      ■\n"
    "\t■\t\t\t           6->显示影片信息                                      ■\n"
    "\t■\t\t\t           7->统计影片信息                                      ■\n"
    "\t■\t\t\t           8->排序影片信息                                      ■\n"
    "\t■\t\t\t           0->退出管理系统                                      ■\n"
    "\t■**************************************************************************************■\n"
    "\t■\t  请输入选择的功能(0~8):                                                        ■\n");
    printf("\t■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■\n");
    scanf("%d",&figure);
    switch(figure)
    {
    	case 1:     type_in(head);
    	    break;
        case 2:     CFind(head);
            break;
        case 3:     Insert(head);
            break;
        case 4:     Change(head);
            break;
        case 5:     Deletem(head);
            break;
        case 6:     Print(head);
            break;
        case 7:     Statistics(head);
            break;
        case 8:     Sort(head);
            break;
        case 0:     Exit();
            break;
        default:    {
                        printf("\n\n\n\t输入选项错误,请重新输入!\n");
                        system("pause");
                        goto loop;
                    }
            break;
	}

}
//主菜单的显示

void router_registe(pAccout ahead)
{
	system("cls");
	char username[20];
	char password[13];
	char pass[13];
	char q;
	int i;
	FILE *fp;
	loop2:
	printf("\n\n\n\n");
	printf("\t\t\t\t账号:");
	scanf("%s",username);
		getchar();
		printf("\t\t\t\t密码:");
		i=0;
		while (1)
		{
			q = getch();
			if (q != 13)
			 {
				printf("*");
				password[i++] = q;
			}
			else {
				password[i] = '\0';
				printf("\n");
				break;
				}
			}
		printf("\t\t\t\t请确认密码:");
			i=0;
		while (1)
		{
			q = getch();
			if (q != 13)            //13是回车的ANSCII码
            {
				printf("*");
				pass[i++] = q;
			}
			else
                {
				pass[i] = '\0';
				printf("\n");
				break;
				}
        }
	if(strcmp(pass,password)==0)
	{
	fp=fopen("C:\\Users\\曦\\Desktop\\C语言课设\\Accout.txt", "at+");
    fprintf(fp," %s %s\n",username,password);  //把内存中的文件输入到硬盘中
	fclose(fp);
	system("cls");
	printf("\n\n\n\n注册成功\n");
	}
	else goto loop2;
}
//*****************登录*****************//
pAccout router_acc(pAccout ahead)
{
	pAccout p1,p2;
	FILE *fp;
	int m=0;
	if((fp=fopen("C:\\Users\\曦\\Desktop\\C语言课设\\Accout.txt", "rw"))==NULL)
	{
		printf("读取失败!");
		return ahead;
	 }
	ahead==NULL;
	p1=(pAccout)malloc(sizeof(Accout));
	while(fscanf(fp,"%s %s",p1->name,p1->pass)==2)
	{
		//printf("%s\n",p1->name);                  //读进去了
		m=m+1;
		if(m==1)
		{
			ahead->next=p1;
			p2=p1;
			p2->next = NULL;
		}
		else
		{
			p2->next=p1;
			p2=p1;
			p2->next=NULL;
		}
		p1=(pAccout)malloc(sizeof(Accout));
	}
	fclose(fp);
	return ahead;
}
pAccout router_acc1(pAccout ahead)
{
	pAccout p1,p2;
	FILE *fp;
	int m=0;
	if((fp=fopen("C:\\Users\\曦\\Desktop\\C语言课设\\Accout.txt", "rw"))==NULL)
	{
		printf("读取失败!");
		return ahead;
	 }
	ahead==NULL;
	p1=(pAccout)malloc(sizeof(Accout));
	while(fscanf(fp,"%s %s",p1->name,p1->pass)==2)
	{

	//printf("%s\n",p1->name);     //由于文件没有读入换行,读出的时候将先一个人的密码和
	//printf("%s",p1->pass);      //后一个人的名称
		m=m+1;
		if(m==1)
		{
			ahead->next=p1;
			p2=p1;
			p2->next = NULL;
		}
		else
		{
			p2->next=p1;
			p2=p1;
			p2->next=NULL;
		}
		p1=(pAccout)malloc(sizeof(Accout));
	}
	fclose(fp);
	return ahead;
}
void login_printf()
{
	system("cls");
	printf("\n\n\n\n");
	printf("\t\t\t★☆★☆★☆★☆★☆★☆★☆★☆\n");
	printf("\t\t\t☆                            ★\n");
	printf("\t\t\t☆         1.登录             ★\n");
	printf("\t\t\t☆         2.注册             ★\n");
	printf("\t\t\t★         0.退出             ☆\n");
 	printf("\t\t\t☆                            ★\n");
	printf("\t\t\t★☆★☆★☆★☆★☆★☆★☆★☆\n");
}
void login_printf1()
{
	system("cls");
	printf("\n\n\n\n");
	printf("\t\t\t********************************\n");
	printf("\t\t\t||                            ||\n");
	printf("\t\t\t||         1.管理员登录       ||\n");
	printf("\t\t\t||         2.用户登录         ||\n");
	printf("\t\t\t||         0.退出             ||\n");
 	printf("\t\t\t||                            ||\n");
	printf("\t\t\t********************************\n");
}
void print2()
{
	system("cls");
	printf("\n\n\n\n");
	printf("\t\t\t|******************************|\n");
	printf("\t\t\t||****************************||\n");
	printf("\t\t\t|||                          |||\n");
	printf("\t\t\t|||        谢谢使用          |||\n");
	printf("\t\t\t|||                          |||\n");
	printf("\t\t\t||****************************||\n");
	printf("\t\t\t|******************************|\n");
	Sleep(2000);
}

pAccout login_panduan(pAccout ahead)
{
	char name1[20],pass1[20];
	char q;
	pAccout p1;
	int i=0,j=0;
	system("cls");
	printf("\n\n\n\n");
	loop1:
	while(1)
	{
		j++;
		p1=ahead->next;
		printf("\t\t\t\t账号:");
		scanf("%s",name1);
		getchar();
		printf("\t\t\t\t密码:");
		i=0;
		while (1)
		{
			j++;
			q = getch();
			if (q != 13)
			 {
				printf("*");
				pass1[i++] = q;
			}
			else {
				pass1[i] = '\0';
				printf("\n");
				break;
				}
			}
			//printf("%s",pass1);密码正确(加密最初出现问题)
		while(p1!=NULL)
		{
			if(strcmp(name1,p1->name)==0)
			{
				if(strcmp(pass1,p1->pass)==0)
				{
					printf("\n\n\t\t\t\t登录成功!");
					Sleep(2000);
					return ahead;
				 }
				else
				{
					p1=p1->next;
				}
			}
			else
			{
				p1=p1->next;
			}
			if(p1==NULL)
			{
				printf("\n\n\n\n\t\t\t\t输入有误");
				system("cls");
				printf("\n\n\n\n\t\t\t\t请重新输入\n");
				Sleep(2000);
				goto loop1;
				break;
			}
		}
		if(j>=change)
		{
			system("cls");
			printf("\n\n\n\n");
			printf("\t\t\t\t***************\n");
			printf("\t\t\t\t你完蛋了!!!!!\n");
			printf("\t\t\t\t***************\n");
			Sleep(2000);
			print2();
			exit (0);
		}
	}
	return ahead;
}//登录成功
int panduan(char choice)
{
	while(1)
	{
		fflush(stdin);
		choice=getchar();
		if(choice == 'y'|| choice =='Y')
		return 1;
		else if(choice == 'n'||choice == 'N')
		return 0;
		while(getchar() != '\n')
			continue;
		printf("输入错误!请重新输入您的选择:\n");
	}
}
int back(char *a)
{
	if(strlen(a)==1)
	{
		if(a[0]>='0'&&a[0]<='9')
		return ((int)a[0]-48);
	}
	else
	    return 10;
}

void login_acc()
 {
 	system("cls");
 	int bk;
 	int bb;
 	pAccout ahead,p1;
 	ahead=(pAccout)malloc(sizeof(Accout));
 	ahead->next=NULL;
 	while(1)
 	{
 		char a[200];
 		char b[200];
 		loop:
 		login_printf();
		printf("请输入:");
		scanf("%s",a);
		bk=back(a);
		switch(bk)
		{
			case 1:{
					login_printf1();
					 printf("请输入:");
					 scanf("%s",b);
					 bb=back(b);
					 switch(bb)
					 {
					 	case 1:{
					 			router_acc(ahead);
					 			ahead=login_panduan(ahead);//管理员登录
					 			//meun();
								break;
								 }
						case 2:{
									router_acc1(ahead);
									ahead=login_panduan(ahead);//用户登陆
									//menu1();
									break;
								}
						case 0:
							{
								print2();
								exit(0);
								break;
							}
						default:printf("输入错误!");
								Sleep(1000);
								system("cls");
									break;
					 }
					 if(bb!=0)//丢失此处则会无法跳出循环
						 break;
					}
			case 2:{
						router_registe(ahead);
			            goto loop;
						break;
			}
			case 0:{
				//	printf("BUG!!!!\n");测试bug!!!!!
					print2();
					exit(0);
					break;
					}
			default:printf("输入错误!");
					Sleep(1000);
					system("cls");
					break;
		}
		if(bk!=0)
		break;
	}
}
int main()
{
    login_acc();
    linklist head = init();
    menu(head);
    return 0;
}

这串代码可能还有些小的bug,如果有改进的方法,可以在下方评论。(代码较简陋,包含一下。)

  • 5
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
影碟出租系统需求规格说明书 1 引言 1.1 编写目的 在编写“影碟出租系统”软件之前,对同类型产品的市场进行了前期调查,与多位软件设计者和使用者进行了探讨和分析,之后由软件项目小组向系统分析人员与软件设计人员提出了这份需求规格说明书。该需求规格说明书对影碟管理系统软件进行了全面细致的用于需求分析,明确所要开发的软件应具有的功能、性能与界面。该需求规格说明书供概要设计人员阅读。 1.2 项目背景 本项目名称为“影碟出租管理系统”。系统主要功能包括:能代替原来琐碎的影碟出租管理,使影碟出租变得便捷、高效、信息完整,主要完成功能包括:出租、归还影碟信息的统计:客户编号、影碟编号、出租时间、归还时间、延期天数、出租金额;客户信息查询:客户编号、客户姓名、证件号、地区、邮政编码、客户地址、联系方式、租碟次数、延期次数,押金;影碟信息查询:影碟编号、影碟名称、影碟类型、导演、影碟描述、影碟总数、库存影碟数;客户及影碟的添加、删除。 1.3 定义 以下对FCDRS、SQL Server、C++分别定义如下。 FCDRS:Film CD Rentment System,影碟出租系统。 SQL Server:所用的数据库管理系统。 C++:所用的开发工具。 1.4 参考文献 [1] 陈明.软件工程实用教程.北京:电子工业出版社,2006年1月. [2] 张海藩.软件工程导论.人民邮电出版社,2006年1月 . [3] 潘孝铭.软件文档编写.高等教育出版社,2004年8月. [4] 罗先文.软件工程实物.重庆大学出版社,2005年3月. 2 项目概述 2.1 要求 影碟出租系统应该具有对客户信息、影碟信息进行储存和管理的功能,并能够保存影碟信息、客户信息、出租历史、账号信息,具有用户管理的功能。该系统能极大地减轻影碟出租工作人员日常工作,并提供影碟出租报表,以便影碟出租领导能及时掌握市场信息,及时引进适合市场需求的影碟。 2.1.1 功能 影碟出租系统最主要的功能是影碟信息管理、客户信息管理、影碟出租管理、用户管理等功能 2.1.2 性能 影碟出租系统的使用者是影碟出租管理员和客户。对于影碟管理员得管理工作,需要达到方便影碟入库等操作。对于客户应满足其一般预定、租借、返还等功能,对性能要求较高。 2.1.3 系统的输出 系统的输出包括以下内容。 (1) 影碟库存情况。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

∃!YOU

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值