c语言编写的简单信息管理系统

#include"stdio.h"
#include"stdlib.h"
#include"conio.h"
#include"string.h"
#include
#include
#pragma comment(lib,"winmm.lib")
struct Nobel
{
    char name[30];//姓名
    char sex[10];//性别
    int  time;//年份
    char Nat[30];//国籍
    char prize[60];//奖项
    struct Nobel *next;
};

void systemTime()
{
    time_t t;
    time(&t);
    printf("%s",ctime(&t));
}

void Scr()
{
    printf("\n\n\n");
    systemTime();
    printf("\n\n ************************欢迎进入诺贝尔获奖者信息管理系统********************\n");
    printf(" -------------------------------^_^--------------------------------------\n\n");
    printf("                        1--录入诺贝尔获奖者信息\n");
    printf("                        2--删除诺贝尔获奖信息\n");
    printf("                        3--增添诺贝尔获奖信息\n");
    printf("                        4--修改诺贝尔获奖信息\n");
    printf("                        5--输出诺贝尔获奖信息\n");
    printf("                        6--查询诺贝尔获奖信息\n");
    printf("                        7--统计诺贝尔获奖\n");
    printf("                        0--退出系统\n\n");
    printf(" --------------------------------^_^-------------------------------------\n\n");
    
}
int count=0;
struct Nobel *creat()//创建链表
{
    struct Nobel *pHead,*pNew;
    pHead=(struct Nobel*)malloc(sizeof(struct Nobel));
    pNew=(struct Nobel*)malloc(sizeof(struct Nobel));
    printf("姓名:\n");
    scanf("%s",pNew->name);
    printf("性别:\n");
    scanf("%s",pNew->sex);
    printf("年份:\n");
    scanf("%d",&pNew->time);
    printf("国藉:\n");
    scanf("%s",pNew->Nat);
    printf("所获奖项\n");
    scanf("%s",pNew->prize);
    count++;
    pNew->next=NULL;
    pHead->next=pNew;
    system("pause");
    system("cls");
    Scr();
    return pHead;
}
void creat2(struct Nobel *pHead)//创建链表
{
    struct Nobel *pNew,*p=pHead;
    int i;
    for(i=0;i         p=p->next;
    pNew=(struct Nobel*)malloc(sizeof(struct Nobel));
    printf("姓名:\n");
    scanf("%s",pNew->name);
    printf("性别:\n");
    scanf("%s",pNew->sex);
    printf("年份:\n");
    scanf("%d",&pNew->time);
    printf("国藉:\n");
    scanf("%s",pNew->Nat);
    printf("所获奖项\n");
    scanf("%s",pNew->prize);
    count++;
    pNew->next=NULL;
    p->next=pNew;
    system("pause");
    system("cls");
    Scr();
}
void Insert(struct Nobel *pHead,char b[])//插入信息
{
    struct Nobel *pNew,*p=pHead->next;
    while(strcmp(b,p->name)&&p!=NULL)
        p=p->next;        
    if(p==NULL)
        printf("您输入的信息有误^_^!\n请核对后再次输出!\n");
    else{
    pNew=(struct Nobel*)malloc(sizeof(struct Nobel));
    printf("姓名:\n");
    scanf("%s",pNew->name);
    printf("性别:\n");
    scanf("%s",pNew->sex);
    printf("年份:\n");
    scanf("%d",&pNew->time);
    printf("国藉:\n");
    scanf("%s",pNew->Nat);
    printf("所获奖项\n");
    scanf("%s",pNew->prize);
    count++;
    pNew->next=NULL;
    p->next=pNew;}
    system("pause");
    system("cls");
    Scr();
}
void correct(struct Nobel *pHead,char b[])//修改信息
{
    struct Nobel *p=pHead->next;
    while(p&&strcmp(b,p->name))
        p=p->next;
    if(p==NULL)
        printf("所要修改的信息不存在!\n");
    else{
        printf("姓名:\n");
        scanf("%s",p->name);
        printf("性别:\n");
        scanf("%s",p->sex);
        printf("年份:\n");
        scanf("%d",&p->time);
        printf("国藉:\n");
        scanf("%s",p->Nat);
        printf("所获奖项\n");
        scanf("%s",p->prize);
    }
    system("pause");
    system("cls");
    Scr();
}

void Delet(struct Nobel *pHead,char b[])//删除信息
{
    struct Nobel *p=pHead,*q;
    while(strcmp(b,p->name)&&p!=NULL)
    {
        q=p;
        p=p->next;
    }
    if(q->next==NULL)
        printf("所要删除的信息不存在:\n");
    else
    {
        q->next=p->next;
        free(p);
        printf("删除成功:\n");
        count--;
    }
    system("pause");
    system("cls");
    Scr();
}
save(struct Nobel *pHead)//将链表中的信息保存在文件中
{
    struct Nobel *Nob;
    FILE *fp;
    fp=fopen("nobel prize winner information.txt","wt");
    if(fp==NULL)
    {
        printf("文件不存在or打开路径有误:\n");
        getch();
        exit(1);
    }
    else
    {
        for(Nob=pHead->next;Nob!=NULL;Nob=Nob->next)
        fprintf(fp,"%s %s %d %s %s\n",Nob->name,Nob->sex,Nob->time,Nob->Nat,Nob->prize);
        fclose(fp);
    }
}
//从指定的磁盘文件中读取信息并存入单链表中
struct Nobel *readt()
{
    struct Nobel *pHead,*pNew,*pEnd;
    FILE *fp;
    fp=fopen("nobel prize winner information.txt","rt");
    if(fp==NULL)
    {
        printf("读取文件失败!\n");
        getch();
        exit(1);
    }
    pHead=(struct Nobel*)malloc(sizeof(struct Nobel));
    pHead->next=NULL;
    pEnd=pHead;
    while(!feof(fp))
    {
        pNew=(struct Nobel*)malloc(sizeof(struct Nobel));
        //从文件中读取信息
        fscanf(fp,"%s %s %d %s %s\n",pNew->name,pNew->sex,&pNew->time,pNew->Nat,pNew->prize);
        pEnd->next=pNew;
        pEnd=pNew;
    }
    pEnd->next=NULL;
    fclose(fp);
    return pHead;
}
void Scr2()
{
    printf("\n\n\t\t********************★★★********************\n\n");
    printf("\t\t-----------------------※※※---------------------\n\n");
    printf("\t\t|.................欢迎进入查询界面..............\n\n");
    printf("\t\t|           1-按姓名输出诺贝尔奖得者信息          |\n\n");
    printf("\t\t|           2-按国籍输出诺贝尔奖得者信息          |\n\n");
    printf("\t\t|           3-按性别输出诺贝尔奖得者信息          |\n\n");
    printf("\t\t|           4-按年份输出诺贝尔得奖者信息          |\n\n");
    printf("\t\t|           5-按得奖类型输出诺贝尔得奖者信息      |\n\n");
    printf("\t\t|           0-退出查询界面                        |\n\n");
    printf("\n\n\t\t*********************★★★********************\n\n");
    printf("\t\t----------------------★★★★★★----------------------\n\n");
}
void Scr3()
{
    printf("\n\n\t\t********************★★★********************\n\n");
    printf("\t\t-----------------------※※※---------------------\n\n");
    printf("\t\t|.................欢迎进入统计界面...............|\n\n");
    printf("\t\t|           1-按姓名统计                         |\n\n");
    printf("\t\t|           2-按国籍统计                         |\n\n");
    printf("\t\t|           3-按性别统计                         |\n\n");
    printf("\t\t|           4-按年份统计                         |\n\n");
    printf("\t\t|           5-按得奖类型统计                     |\n\n");
    printf("\t\t|           0-退出统计界面                       |\n\n");
    printf("\t\t*********************★★★********************\n\n");
    printf("\t\t------------------(● ̄(?) ̄●)----------------------\n\n");
}
void print(struct Nobel *pHead)
{
    struct Nobel *p=pHead->next,*a[100],*t;
    int i,j,change=1;
    for(i=0;i     {
        a[i]=p;
        p=p->next;
    }
    for(i=0;i     {
        change=0;
        for(j=0;j         {
            if(a[j]->timetime)
            {
                t=a[j];
                a[j]=a[j+1];
                a[j+1]=t;
                change=1;
            }
        }  
    }
   printf("姓名\t\t性别\t\t年份\t\t国籍\t\t得奖类型\t\t\n");
   for(i=0;i     {
        printf("%-16s%-16s%-16d%-16s%-16s\n",a[i]->name,a[i]->sex,a[i]->time,a[i]->Nat,a[i]->prize);
        
    }
     system("pause");//press any key to continue
     system("cls");
     Scr();
}

void search1(struct Nobel *pHead)
{
    struct Nobel *p=pHead->next;
    char b[30];
    int Q=0;
    printf("请输入姓名!\n");
    scanf("%s",b);
    printf("姓名\t\t性别\t\t年份\t\t国籍\t\t得奖类型\t\t\n");
    while(p!=NULL)
    {
        if(strcmp(b,p->name)==0){
                printf("%-16s%-16s%-16d%-16s%-16s\n",p->name,p->sex,p->time,p->Nat,p->prize);        
                Q=1;
        }
        p=p->next;
    }
    if(Q==0)   printf("您所要查询的信息不存在!\n");
    system("pause");
    system("cls");
    Scr2();
}
void search2(struct Nobel *pHead)
{
    struct Nobel *p=pHead->next;
    char b[30];
    int Q=0;
    printf("请输入国籍!\n");
    scanf("%s",b);
    printf("姓名\t\t性别\t\t年份\t\t国籍\t\t得奖类型\t\t\n");
    while(p!=NULL)
    {
        if(strcmp(b,p->Nat)==0){
                printf("%-16s%-16s%-16d%-16s%-16s\n",p->name,p->sex,p->time,p->Nat,p->prize);
                Q=1;
        }
        p=p->next;
    }
    if(Q==0)   printf("您所要查询的信息不存在!\n");
    system("pause");
    system("cls");
    Scr2();
    
}
void search3(struct Nobel *pHead)
{
    struct Nobel *p=pHead->next;
    char b[30];
    int Q=0;
    printf("请输入性别!\n");
    scanf("%s",b);
    printf("姓名\t\t性别\t\t年份\t\t国籍\t\t得奖类型\t\t\n");
    while(p!=NULL)
    {
        if(strcmp(b,p->sex)==0){
                printf("%-16s%-16s%-16d%-16s%-16s\n",p->name,p->sex,p->time,p->Nat,p->prize);
                Q=1;
        }
        p=p->next;
    }
    if(Q==0)   printf("您所要查询的信息不存在!\n");
    system("pause");
    system("cls");
    Scr2();
    
}
void search4(struct Nobel *pHead)
{
    struct Nobel *p=pHead->next;
    int a,Q=0;
    printf("请输入年份!\n");
    scanf("%d",&a);
    printf("姓名\t\t性别\t\t年份\t\t国籍\t\t得奖类型\t\t\n");
    while(p!=NULL)
    {
        if(p->time==a){
                printf("%-16s%-16s%-16d%-16s%-16s\n",p->name,p->sex,p->time,p->Nat,p->prize);
                Q=1;
        }
        p=p->next;
    }
    if(Q==0)   printf("您所要查询的信息不存在!\n");
    system("pause");
    system("cls");
    Scr2();
}
void search5(struct Nobel *pHead)
{
    struct Nobel *p=pHead->next;
    char b[30];
    int Q=0;
    printf("请输入奖项!\n");
    scanf("%s",b);
    printf("姓名\t\t性别\t\t年份\t\t国籍\t\t得奖类型\t\t\n");
    while(p!=NULL)
    {
        if(strcmp(b,p->prize)==0){
            printf("%-16s%-16s%-16d%-16s%-16s\n",p->name,p->sex,p->time,p->Nat,p->prize);
            Q=1;
        }
        p=p->next;
    }
    if(Q==0)   printf("您所要查询的信息不存在!\n");
    system("pause");
    system("cls");
    Scr2();
    
}
void Search(struct Nobel *pHead)//查询
{
      int choice;
      Scr2();
      do
      {
       scanf("%d",&choice);
       switch(choice)
       {
            case 1:search1(pHead);break;
            case 2:search2(pHead);break;
            case 3:search3(pHead);break;
            case 4:search4(pHead);break;
            case 5:search5(pHead);break;
       }
      }while(choice!=0);
      system("pause");
      system("cls");
      Scr();
}
void statistic1(struct Nobel *pHead)
{
    struct Nobel *p=pHead->next;
    char b[30];
    int i=0;
    printf("请输入姓名!\n");
    scanf("%s",b);
    while(p!=NULL)
    {
        if(strcmp(b,p->name)==0)
            i++;
        p=p->next;
    }
    printf("姓名为%s的诺贝尔获奖者共有%d位!",b,i);
    system("pause");
    system("cls");
    Scr3();
}
void statistic2(struct Nobel *pHead)
{
    struct Nobel *p=pHead->next;
    char b[30];
    int i=0;
    printf("请输入国籍!\n");
    scanf("%s",b);
    while(p!=NULL)
    {
        if(strcmp(b,p->Nat)==0)
            i++;
        p=p->next;
    }
    printf("国籍为%s的诺贝尔获奖者共有%d位!",b,i);
    system("pause");
    system("cls");
    Scr3();
}
void statistic3(struct Nobel *pHead)
{
    struct Nobel *p=pHead->next;
    char b[30];
    int i=0;
    printf("请输入性别!\n");
    scanf("%s",b);
    while(p!=NULL)
    {
        if(strcmp(b,p->sex)==0)
            i++;
        p=p->next;
        
    }
    printf("性别为%s的诺贝尔获奖者共有%d位!",b,i);
    system("pause");
    system("cls");
    Scr3();
}
void statistic4(struct Nobel *pHead)
{
    struct Nobel *p=pHead->next;
    int b;
    int i=0;
    printf("请输入年份!\n");
    scanf("%d",&b);
    while(p!=NULL)
    {
        if(b==p->time)
            i++;
        p=p->next;
    }
    printf("年龄为%d的诺贝尔获奖者共有%d位!",b,i);
    system("pause");
    system("cls");
    Scr3();
}
void statistic5(struct Nobel *pHead)
{
    struct Nobel *p=pHead->next;
    char b[30];
    int i=0;
    printf("请输入奖项类型!\n");
    scanf("%s",b);
    while(p!=NULL)
    {
        if(strcmp(b,p->prize)==0)
            i++;
        p=p->next;
    }
    printf("获得%s的诺贝尔获奖者共有%d位!",b,i);
    system("pause");
    system("cls");
    Scr3();
}
void Statistic(struct Nobel *pHead)//统计
{
     int choice;
     Scr3();
     do
     {
        scanf("%d",&choice);
        switch(choice)
        {
           case 1:statistic1(pHead);break;
           case 2:statistic2(pHead);break;
           case 3:statistic3(pHead);break;
           case 4:statistic4(pHead);break;
           case 5:statistic5(pHead);break;
        }
     }while(choice!=0);
      system("pause");
      system("cls");
      Scr();
}
void Ser()
{
    char sy[7];
    int i=0;
    printf("\n\n\n\t\t\t    请输入七位密码\n\n\n\t\t\t      ");
    do
    {
        sy[i++]=getch();
        printf("*");
    }while(i!=7);
    sy[i]='\0';
    if(strcmp(sy,"forever")!=0)
    {
        system("cls");
        printf("\n\n\n\t\t\t抱歉,您输入的密码有误,请再次输入!\n\n\n");
        printf("\t    ⊙-------------------☆☆☆-------------------⊙    \n\n");
        Ser();
    }
}
void logtime(char c,int n,int s)
{
    int i;
    for(i=0;i     {
        printf("%c",c);
        Sleep(s);
    }
}
void main()
{
    struct Nobel *pHead,*t;
    int choice;
    char name[30];
    PlaySound ("1.wav",NULL,SND_FILENAME | SND_ASYNC);
    system("color 5B");
    Ser();
    printf("\n\n\t\tloging");//正在登录
    logtime('.',6,200);
    system("cls");
    Scr();
    do
     {
       scanf("%d",&choice);
       switch(choice)
       {
       case 1:if(count==0)
              {
                  pHead=creat();
                  save(pHead);
              }
                 else
              {
                  pHead=readt();
                  creat2(pHead);
                  save(pHead);
              }
              break;
    
       case 2:pHead=readt();
              printf("请输入要删除人名!\n");
              scanf("%s",name);
              Delet(pHead,name);
              save(pHead);
              break;
       case 3:pHead=readt();
              printf("添加的信息位于**之后!");
              scanf("%s",name);
              Insert(pHead,name);
              save(pHead);
              break;
       case 4:pHead=readt();
              printf("请输入所要修改信息的得奖者姓名!\n");
              scanf("%s",name);
              correct(pHead,name);
              save(pHead);
              break;
       case 5:pHead=readt();
              count=0;
              t=pHead->next;
              do
              {
                  count++;
                  t=t->next;
              }while(t!=NULL);
              print(pHead);
              save(pHead);
              break;
       case 6:pHead=readt();
              Search(pHead);
              save(pHead);
              break;
       case 7:pHead=readt();
              Statistic(pHead);
              save(pHead);
              break;
       }
     }while(choice!=0);
}

你可能感兴趣的:(c语言编写的简单信息管理系统)