学生信息管理系统C语言版

C语言学生信息管理系统包括以下功能:

1、学生信息的整体注册
2、学生信息的修改
3、学生成绩信息的录入
4、学生信息的添加
5、恢复误删的学生信息
6、学生信息的删除
7、密码修改保存函数
8、学生信息的查询
9、密码修改函数
10、学生信息管理系统的菜单函数

#include "stdio.h"
#include "malloc.h"
#include "string.h"
#include "stdlib.h"
#include "conio.h"
#define M 3
struct student
{
  char num[10];       /* 学生的学号 */
  char name[20];       /* 学生的姓名 */
  char sex[5];        /* 学生的性别 */
  int age;          /* 学生的年龄 */
  char birth[20];       /* 学生的出生年月 */
  long tele;         /* 学生的电话号码 */
  char addr[30];       /* 学生的地址 */
  char party[10];       /* 学生是否为党员 */
  float score[M];       /* 学生各门学科成绩 */
  float total;        /* 学生的学科成绩总分 */
  struct student *next; 

}stud[100];
struct secret
{
  char user[30];
  char code[30]; 

}use[100];
int len;   //学生人数 

/////////////////////////////////////////////////////////////////////////////////
/*学生信息写入到文件中-----系统函数*/
/////////////////////////////////////////////////////////////////////////////////
void writetxt(struct student *head)
{
  struct student *p;
  p=head;
  FILE *fp;
  fp=fopen("d://student.txt","wb");
  if(fp==NULL)
  {
    printf("cannot open");
    return ;
  }
  while(p!=NULL)
  {
    fwrite(p,sizeof(struct student),1,fp);
    p=p->next;
  }
  fclose(fp); 

} 

/////////////////////////////////////////////////////////////////////////////////
/*    学生信息的整体注册*/
/////////////////////////////////////////////////////////////////////////////////
struct student *create( )
{
  char ch;
  char ok;
  int i;
  struct student *p,*p1,*head,*p2;
  FILE *fp;
  fp=fopen("d://student.txt","rb");
  if(fp==NULL)
  {
    printf("/n      文件还不存在,是否创建?(Y/N)/n");
    ch=getchar();
    len=1;
    scanf("%c",&ok);
    if(ok=='Y'||ok=='y')
    {
      p1=p2=(struct student *) malloc(sizeof(struct student));
      if((len)<10)
        printf("请输入0%d的学号:",len);
      else
        printf("请输入%d的学号:",len);
      scanf("%s",p1->num);
      if((len)<10)
        printf("请输入0%d的姓名:",len);
      else
        printf("请输入%d的姓名:",len);
      scanf("%s",p1->name);
      if((len)<10)
        printf("请输入0%d的性别:",len);
      else
        printf("请输入%d的性别:",len);
      scanf("%s",p1->sex);
      ch=getchar();
      if((len)<10)
        printf("请输入0%d的年龄:",len);
      else
        printf("请输入%d的年龄:",len);
      scanf("%d",&p1->age);
      if((len)<10)
        printf("请输入0%d的生日:",len);
      else
        printf("请输入%d的生日:",len);
      scanf("%s",p1->birth);
      if((len)<10)
        printf("请输入0%d的电话:",len);
      else
        printf("请输入%d的电话号:",len);
      scanf("%ld",&p1->tele);
      if((len)<10)
        printf("请输入0%d的地址:",len);
      else
        printf("请输入%d的地址:",len);
      scanf("%s",p1->addr);
      if((len)<10)
        printf("请输入0%d是否为党员:",len);
      else
        printf("请输入%d是否为党员:",len);
      scanf("%s",p1->party);
      head=NULL;
      while(strcmp(p1->num,"0")!=0)
      {
        len++;
        if(head==NULL)
          head=p1=p2;
        else
          p2->next=p1;
        p2=p1;
        p1=(struct student *) malloc(sizeof(struct student));
        if((len)<10)
          printf("请输入0%d的学号:",len);
        else
          printf("请输入%d的学号:",len);
        scanf("%s",p1->num);
        if((len)<10)
          printf("请输入0%d的姓名:",len);
        else
          printf("请输入%d的姓名:",len);
        scanf("%s",p1->name);
        if((len)<10)
          printf("请输入0%d的性别:",len);
        else
          printf("请输入%d的性别:",len);
        scanf("%s",p1->sex);
        ch=getchar();
        if((len)<10)
          printf("请输入0%d的年龄:",len);
        else
          printf("请输入%d的年龄:",len);
        scanf("%d",&p1->age);
        if((len)<10)
          printf("请输入0%d的生日:",len);
        else
          printf("请输入%d的生日:",len);
        scanf("%s",p1->birth);
        if((len)<10)
          printf("请输入0%d的电话:",len);
        else
          printf("请输入%d的电话号:",len);
        scanf("%ld",&p1->tele);
        if((len)<10)
          printf("请输入0%d的地址:",len);
        else
          printf("请输入%d的地址:",len);
        scanf("%s",p1->addr);
        if((len)<10)
          printf("请输入0%d是否为党员:",len);
        else
          printf("请输入%d是否为党员:",len);
        scanf("%s",p1->party);
      }
      p2->next=NULL;
      writetxt(head);
      return (head);
    }
  }
  if(ok=='N'||ok=='n')
  {
    printf("请重新选择/n");
    return NULL;
  }
  else
  {
    printf("/n      文件已经存在/n");
    fp=fopen("d://student.txt","rb");
    p=stud;
    for(i=0;!feof(fp);i++)
      fread(stud+i,sizeof(struct student),1,fp);
    len=i-1;
    printf("       文件里含有%d条学生信息/n",len);
    printf("/n      是否使用已经存在的学生数据?(Y/N)/n");
    ch=getchar();
    scanf("%c",&ok);
    if(ok=='Y'||ok=='y')
    {
      head=p1=p2=NULL;
      fp=fopen("d://student.txt","rb");
      if(fp==NULL)
      {
        printf("open error/n");
        return NULL;
      }
      else
      {
        printf("学号    姓名    性别   年龄   出生年月   电话号码  地址 是否党员/n");
        for(i=0;i<len;i++)
        {
          p1=(struct student *)malloc(sizeof(struct student));
          fread(p1,sizeof(struct student),1,fp);
          if(head==NULL)
            head=p2=p1;
          else
            p2->next=p1;
          p2=p1;
          printf("%2s%15s%10s%10d%15s%8ld%10s%8s/n",p1->num,p1->name,p1->sex,p1->age,p1->birth,p1->tele,p1->addr,p1->party);
        }
        fclose(fp);
        return(head);
      }
    }
    if(ok=='N'||ok=='n')
    {
      len=1;
      p1=p2=( struct student *) malloc(sizeof(struct student ));
      if((len)<10)
        printf("请输入0%d的学号:",len);
      else
        printf("请输入%d的学号:",len);
      scanf("%s",p1->num);
      if((len)<10)
        printf("请输入0%d的姓名:",len);
      else
        printf("请输入%d的姓名:",len);
      scanf("%s",p1->name);
      if((len)<10)
        printf("请输入0%d的性别:",len);
      else
        printf("请输入%d的性别:",len);
      scanf("%s",p1->sex);
      ch=getchar();
      if((len)<10)
        printf("请输入0%d的年龄:",len);
      else
        printf("请输入%d的年龄:",len);
      scanf("%d",&p1->age);
      if((len)<10)
        printf("请输入0%d的生日:",len);
      else
        printf("请输入%d的生日:",len);
      scanf("%s",p1->birth);
      if((len)<10)
        printf("请输入0%d的电话:",len);
      else
        printf("请输入%d的电话号:",len);
      scanf("%ld",&p1->tele);
      if((len)<10)
        printf("请输入0%d的地址:",len);
      else
        printf("请输入%d的地址:",len);
      scanf("%s",p1->addr);
      if((len)<10)
        printf("请输入0%d是否为党员:",len);
      else
        printf("请输入%d是否为党员:",len);
      scanf("%s",p1->party);
      head=NULL;
      while(strcmp(p1->num,"0")!=0)
      {
        if(head==NULL)
          head=p1=p2;
        else
          p2->next=p1;
        p2=p1;
        p1=(struct student *) malloc(sizeof(struct student));
        if((len)<10)
          printf("请输入0%d的学号:",len);
        else
          printf("请输入%d的学号:",len);
        scanf("%s",p1->num);
        if((len)<10)
          printf("请输入0%d的姓名:",len);
        else
          printf("请输入%d的姓名:",len);
        scanf("%s",p1->name);
        if((len)<10)
          printf("请输入0%d的性别:",len);
        else
          printf("请输入%d的性别:",len);
        scanf("%s",p1->sex);
        ch=getchar();
        if((len)<10)
          printf("请输入0%d的年龄:",len);
        else
          printf("请输入%d的年龄:",len);
        scanf("%d",&p1->age);
        if((len)<10)
          printf("请输入0%d的生日:",len);
        else
          printf("请输入%d的生日:",len);
        scanf("%s",p1->birth);
        if((len)<10)
          printf("请输入0%d的电话:",len);
        else
          printf("请输入%d的电话号:",len);
        scanf("%ld",&p1->tele);
        if((len)<10)
          printf("请输入0%d的地址:",len);
        else
          printf("请输入%d的地址:",len);
        scanf("%s",p1->addr);
        if((len)<10)
          printf("请输入0%d是否为党员:",len);
        else
          printf("请输入%d是否为党员:",len);
        scanf("%s",p1->party);
      }
      p2->next=NULL;
      writetxt(head);
    }
    return (head);
  }
}
////////////////////////////////////////////////////////////////////////////////
/*学生信息的修改*/
////////////////////////////////////////////////////////////////////////////////
struct student *change(struct student *head)
{ 

  struct student *p=head;
  int age,choose,m;
  long tele;
  char num[10];
  char ch,yes,sex[5],birth[20],addr[30],party[10];
  char *p1;
  if(head==NULL)
  {
    printf("原链表为空");
    return NULL;
  }
  else
  {
    while(1)
    {
      printf("请输入学号/n");
      scanf("%s",num);
      p=head;
      while(p!=NULL&&strcmp(p->num,num)!=0)
      {
        p=p->next;
        if(p==NULL)
        {
          printf("该学生不存在/n");
          break;
        }
        if(strcmp(p->name,"0")==0)
        {
          printf("该学生已不存在/n");
          break;
        }
      }
      m=0;
      while(1)
      {
        if(p==NULL)
          break;
        if(strcmp(p->name,"0")==0)
          break;
        printf("请选择1.性别 2.年龄 3.出生日期4.电话 5.家庭住址6.党员/n");
        scanf("%d",&choose);
        if(choose==1)
        {
          printf("请输入新的性别:/n");
          scanf("%s",&sex);
          p1=sex;
          strcpy(p->sex,p1);
          printf("是否继续修改本学生学生其他信息Y/N/n");
          ch=getchar();
          scanf("%c",&yes);
          if(yes=='N'||yes=='n')
            break;
        }
        if(choose==2)
        {
          printf("请输入新的年龄:/n");
          scanf("%d",&age);
          p->age=age;
          printf("是否继续修改本学生学生其他信息Y/N/n");
          ch=getchar();
          scanf("%c",&yes);
          if(yes=='N'||yes=='n')
            break;
        }
        if(choose==3)
        {
          printf("请输入新的出生日期:/n");
          scanf("%s",birth);
          p1=birth;
          strcpy(p->birth,p1);
          printf("是否继续修改本学生学生其他信息Y/N/n");
          ch=getchar();
          scanf("%c",&yes);
          if(yes=='N'||yes=='n')
            break;
        }
        if(choose==4)
        {
          printf("请输入新的电话:/n");
          scanf("%d",&tele);
          p->tele=tele;
          printf("是否继续修改本学生学生其他信息Y/N/n");
          ch=getchar();
          scanf("%c",&yes);
          if(yes=='N'||yes=='n')
            break;
        }
        if(choose==5)
        {
          printf("请输入新的家庭住址:/n");
          scanf("%s",addr);
          p1=addr;
          strcpy(p->addr,p1);
          printf("是否继续修改本学生学生其他信息Y/N/n");
          ch=getchar();
          scanf("%c",&yes);
          if(yes=='N'||yes=='n')
            break;
        }
        if(choose==6)
        {
          printf("请输入'是'或'否':/n");
          scanf("%s",party);
          p1=party;
          strcpy(p->party,p1);
          printf("是否继续修改本学生学生其他信息Y/N/n");
          ch=getchar();
          scanf("%c",&yes);
          if(yes=='N'||yes=='n')
            break;
        }
      }
      printf("是否继续修改其他学生Y/N/n");
      ch=getchar();
      scanf("%c",&yes);
      if(yes=='N'||yes=='n')
        break;
    }
    writetxt(head);
    p=head;
    while(p!=NULL)
    {
      printf("%2s%15s%10s%10d%15s%8ld%10s%8s/n",p->num,p->name,p->sex,p->age,p->birth,p->tele,p->addr,p->party);
      p=p->next;
    }
    return head;
  }
}
/////////////////////////////////////////////////////////////////////////////////
/*学生成绩信息的录入*/
/////////////////////////////////////////////////////////////////////////////////
struct student *chengji(struct student *head)
{
  FILE *fp;
  struct student *p1,*p;
  int i;
  float sum=0;
  fp=fopen("d://student1.txt","wb");
  p1=(struct student *)malloc(sizeof(struct student));
  p1=head;
  while(p1!=NULL)
  {
    if(strcmp(p1->name,"0")==0)
    {
      printf("该学生不存在/n");
      p1=p1->next;
      continue;
    }
    printf("请输入学号为%s学生的高数、C语言、英语成绩:/n",p1->num);
    for(i=0;i<M;i++)
    {
      scanf("%f",&p1->score[i]);
      sum+=p1->score[i];
    }
    p1->total=sum;
    sum=0;
    fwrite(p1,sizeof(struct student),1,fp); 

    p1=p1->next;
  }
  fclose(fp);
  writetxt(head);
  p=head;
  printf("学号    姓名    性别   年龄   出生年月   电话号码  地址 是否党员/n");
  while(p!=NULL)
  {
    printf("%2s%15s%10s%10d%15s%8ld%10s%8s/n",p->num,p->name,p->sex,p->age,p->birth,p->tele,p->addr,p->party);
    p=p->next;
  }
  return(head);
}
/////////////////////////////////////////////////////////////////////////////////
/*学生信息的添加*/
/////////////////////////////////////////////////////////////////////////////////
struct student *insert(struct student *head)
{
  char ch,ok;
  struct student *p,*p0,*p1;
  p=p1=head;
  while(1)
  {
    if((len+1)<10)
      printf("您的学号为0%d/n",len+1);
    else
      printf("您的学号为%d/n",len+1);
    p0=(struct student *)malloc(sizeof(struct student));
    len++;
    if((len)<10)
      printf("请输入0%d的学号:",len);
    else
      printf("请输入%d的学号:",len);
    scanf("%s",p0->num);
    if((len)<10)
      printf("请输入0%d的姓名:",len);
    else
      printf("请输入%d的姓名:",len);
    scanf("%s",p0->name);
    if((len)<10)
      printf("请输入0%d的性别:",len);
    else
      printf("请输入%d的性别:",len);
    scanf("%s",p0->sex);
    ch=getchar();
    if((len)<10)
      printf("请输入0%d的年龄:",len);
    else
      printf("请输入%d的年龄:",len);
    scanf("%d",&p0->age);
    if((len)<10)
      printf("请输入0%d的生日:",len);
    else
      printf("请输入%d的生日:",len);
    scanf("%s",p0->birth);
    if((len)<10)
      printf("请输入0%d的电话:",len);
    else
      printf("请输入%d的电话号:",len);
    scanf("%ld",&p0->tele);
    if((len)<10)
      printf("请输入0%d的地址:",len);
    else
      printf("请输入%d的地址:",len);
    scanf("%s",p0->addr);
    if((len)<10)
      printf("请输入0%d是否为党员:",len);
    else
      printf("请输入%d是否为党员:",len);
    scanf("%s",p0->party);
    while(p->next!=NULL)
      p=p->next;
    p->next=p0;
    p0->next=NULL;
    printf("是否继续添加Y/N/n")  ;
    ch=getchar();
    scanf("%c",&ok);
    if(ok=='y'||ok=='Y')len++;
    else
    {
      printf("您需要重新进行1的操作来完成该学生信息的注册,谢谢!/n");
      break;
    }
  }
  p=head;
  while(p!=NULL)
  {
    printf("%2s%15s%10s%10d%15s%8ld%10s%8s/n",p->num,p->name,p->sex,p->age,p->birth,p->tele,p->addr,p->party);
    p=p->next;
  }
  writetxt(head);
  return(head); 

}
/////////////////////////////////////////////////////////////////////////////////
/* 恢复误删的学生信息*/
/////////////////////////////////////////////////////////////////////////////////
struct student *recover(struct student *head)
{
  FILE *fp;
  struct student *p1,*p;
  p=p1=(struct student*)malloc(sizeof(struct student));
  char ch;
  char num[10];
  p1=head;
  printf("input the recover number:");
  scanf("%s",num);
  fp=fopen("d://recycle.txt","rb");
  if(fp==NULL)
  {
    printf("回收站为空!/n");
    return NULL;
  }
  else
  {
    printf("是否将回收站的数据还原?Y/N /n");
    ch=getchar();
    ch=getchar();
    if(ch=='n'||ch=='N')
      printf("不需要还原!");
    else
    {
      while(1)
      {
        if(strcmp(p1->num,num)==0)
          break;
        else
          p1=p1->next;
      }
      while(!feof(fp))
      {
        fread(p,sizeof(struct student),1,fp);
        if(strcmp(p1->num,p->num)==0)
        {
          strcpy(p1->name,p->name);
          strcpy(p1->sex,p->sex);
          p1->age=p->age;
          strcpy(p1->birth,p->birth);
          p1->tele=p->tele;
          strcpy(p1->addr,p->addr);
          strcpy(p1->party,p->party);
          printf("dddddddddddddddddddd/n");
          break; 

        }
      } 

    }
    writetxt(head); 

    p=head;
    while(p!=NULL)
    {
      printf("%2s%15s%10s%10d%15s%8ld%10s%8s/n",p->num,p->name,p->sex,p->age,p->birth,p->tele,p->addr,p->party);
      p=p->next;
    }fclose(fp);
  }
  return head;
}
/////////////////////////////////////////////////////////////////////////////////
/* 学生信息的删除*/
/////////////////////////////////////////////////////////////////////////////////
struct student *del(struct student *head)
{
  FILE *fp;
  struct student *p1,*p2,*p0;
  p1=p2=head;
  char ch;
  char num[10];
  printf("input the delete number:");
  scanf("%s",num);
  if(head==NULL)
    printf("nothing to delete!");
  else
  {
    while(p1!=NULL)
    {
      if(strcmp(p1->num,num)!=0)
      {
        p2=p1;
        p1=p1->next;
      }
      if(strcmp(p1->num,num)==0)
      {
        p0=p1;
        printf("是否永久删除该学生的信息?Y/N /n");
        ch=getchar();
        ch=getchar();
        if(ch=='y'||ch=='Y')
        {
          printf("该学生信息已经成功从磁盘删除!/n");
          if(p1==head)
          {
            p0=p1;
            head=p1->next;
            p1=p2=head;
            p1=p2->next;
          }
          else
          {
            p0=p1;
            p2->next=p1->next;
            p1=p2->next;
          }
          break;
        }
        else
        {
          fp=fopen("d://recycle.txt","ab+");
          if(fp==NULL)
          {
            printf("cannot open the file!");
            return NULL;
          }
          fwrite(p0,sizeof(struct student),1,fp);
          strcpy(p1->name,"0");
          strcpy(p1->sex,"0");
          p1->age=0;
          strcpy(p1->birth,"0");
          p1->tele=0;
          strcpy(p1->addr,"0");
          strcpy(p1->party,"0"); 

          printf("学生信息已放入回收站!/n");
          fclose(fp); 

          printf("如果想恢复刚刚删除的学生信息,请输入'Y'or'y'/n");
          printf("如果不想恢复刚刚删除的学生信息,请输入'N'or'n'/n");
          ch=getchar();
          ch=getchar();
          if(ch=='y'||ch=='Y')
          {
            head=recover(head);
            break;
          }
          if(ch=='n'||ch=='N')
            break ;
        }
      } 

    } 

  }
  writetxt(head);
  return head;
}
/////////////////////////////////////////////////////////////////////////////
/*    密码修改保存函数*/
////////////////////////////////////////////////////////////////////////////
void write()
{
  FILE *fp;
  struct secret p;
  int i;
  fp=fopen("d://mima.txt","wb");
  if(fp==NULL)
  {
    printf("cannot open!"); 

  }
  for(i=0;i<=len;i++)
  {
    p=use[i];
    fwrite(&p,sizeof(struct secret),1,fp);
  }
  fclose(fp); 

} 

////////////////////////////////////////////////////////////////////////////////
/*学生信息的查询*/
////////////////////////////////////////////////////////////////////////////////
void research(struct student *head)
{
  struct student *p1,*p2;
  p1=p2=head;
  int i,j,l=1,k=0;
  char sex[20],party[10],ch,yes;
  int age;
  char num[10],name[20];
  printf("选择:1.模糊查询  2.精确查询:");
  scanf("%d",&i);
  if(i==1)
  {
    while(l==1)
    {
      printf("选择:1.性别 2.年龄 3.是否党员:");
      scanf("%d",&j);
      if(j==1)
      {  p1=head;
      printf("输入性别:");
      scanf("%s",sex);
      ch=getchar();
      while(p1!=NULL)
      {
        if(strcmp(p1->sex,sex)==0)
        {
          printf("%2s%15s%10s%10d%15s%8ld%10s%8s/n",p1->num,p1->name,p1->sex,p1->age,p1->birth,p1->tele,p1->addr,p1->party);
          p1=p1->next;
          continue;
        }
        k++;
        if(k==3)
          printf("该学生不存在!/n");
        p1=p1->next;
      }
      printf("是否继续查询学生其他信息Y/N/n");
      scanf("%c",&yes);
      printf("yes=%c/n",yes);
      if(yes=='N'||yes=='n')
        break;
      if(yes=='Y'||yes=='y')
        k=0;
      }
      if(j==2)
      {
        p1=head;
        printf("输入年龄:");
        scanf("%d",&age);
        while(p1!=NULL)
        {
          if(p1->age==age)
          {
            printf("%2s%15s%10s%10d%15s%8ld%10s%8s/n",p1->num,p1->name,p1->sex,p1->age,p1->birth,p1->tele,p1->addr,p1->party);
            p1=p1->next;
            continue;
          }
          k++;
          if(k==3)
            printf("该学生不存在!/n");
          p1=p1->next;
        }
        printf("是否继续查询学生其他信息Y/N/n");
        ch=getchar();
        scanf("%c",&yes);
        if(yes=='N'||yes=='n')
          break;
        if(yes=='Y'||yes=='y')
          k=0;
      }
      if(j==3)
      {
        p1=head;
        printf("输入是否党员:");
        scanf("%s",party);
        ch=getchar();
        while(p1!=NULL)
        {
          if(strcmp(p1->party,party)==0)
          {
           printf("%2s%15s%10s%10d%15s%8ld%10s%8s/n",p1->num,p1->name,p1->sex,p1->age,p1->birth,p1->tele,p1->addr,p1->party);
           p1=p1->next;
           continue;
          }
          k++;
          if(k==3)
            printf("该学生不存在!/n");
          p1=p1->next;
        }
        printf("是否继续查询学生其他信息?Y/N/n");
        scanf("%c",&yes);
        if(yes=='N'||yes=='n')
          break;
        if(yes=='Y'||yes=='y')
          k=0;
      }
    }
  }
  if(i==2)
  {
    printf("请选择细查的关键字:1.学生学号 2.学生姓名:");
    scanf("%d",&j);
    if(j==1)
    {
      while(1)
      {
        p1=head;
        printf("输入学生的学号:");
        scanf("%5s",num);
        while(p1!=NULL)
        {
          if(strcmp(p1->num,num)==0)
          {
            printf("%2s%15s%10s%10d%15s%8ld%10s%8s/n",p1->num,p1->name,p1->sex,p1->age,p1->birth,p1->tele,p1->addr,p1->party);
            p1=p1->next;continue;
          }
          k++;
          if(k==3)
            printf("该学生不存在!/n");
          p1=p1->next;
        }
        printf("是否继续查询其他学生信息?Y/N/n");
        ch=getchar();
        scanf("%c",&yes);
        if(yes=='N'||yes=='n')
          break;
        if(yes=='Y'||yes=='y')
          k=0;
      }
    }
    if(j==2)
    {
      while(1)
      {
        p1=head;
        printf("输入学生的名字:");
        scanf("%s",name);
        while(p1!=NULL)
        {
          if(strcmp(p1->name,name)==0)
          {
            printf("%2s%15s%10s%10d%15s%8ld%10s%8s/n",p1->num,p1->name,p1->sex,p1->age,p1->birth,p1->tele,p1->addr,p1->party);
            p1=p1->next;continue;
          }
          k++;
          if(k==3)
            printf("该学生不存在!/n");
          p1=p1->next;
        }
        printf("是否继续查询其他学生信息?Y/N/n");
        ch=getchar();
        scanf("%c",&yes);
        if(yes=='N'||yes=='n')
          break;
        if(yes=='Y'||yes=='y')
          k=0;
      }
    }
  }
} 

////////////////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////////////////
void research1(char num[])
{
  int i;
  for(i=0;i<=len;i++)
    if(strcmp(stud[i].num,num)==0)
      printf("%2s%15s%10s%10d%15s%8ld%10s%8s/n",stud[i].num,stud[i].name,stud[i].sex,stud[i].age,stud[i].birth,stud[i].tele,stud[i].addr,stud[i].party);
} 

/////////////////////////////////////////////////////////////////////////////
/*    密码修改函数-*/
////////////////////////////////////////////////////////////////////////////
void mimacli()
{
  char use1[30],mima[30],newmima[30],ch;
  int i,j=0;
  printf("输入用户名:/n");
  scanf("%s",use1);
  printf("输入密码:/n");
  while(1)
  {
    mima[j]=getch();
    if(mima[j]==13)
      break;
    putchar('*');
    j++;
  }
  mima[j]='/0';
  printf("/n");
  for(i=0;i<=len;i++)
  {
    if(strcmp(stud[i].name,"0")==0)
    {
      printf("该学生不存在/n");
      continue;
    }
    if(strcmp(use1,use[i].user)==0&&strcmp(use[i].code,mima)==0)
    {
      printf("输入新密码:/n");
      ch=getchar();
      j=0;
      while(1)
      {
        newmima[j]=getch();
        if(newmima[j]==13)
          break;
        putchar('*');
        j++;
      }
      newmima[j]='/0';
      printf("/n");
      strcpy(use[i].code,newmima);
      write();
      for(i=0;i<=len;i++){
        printf("///////////////////////////////////////////////n");
        printf("%s  ",use[0].user);
        printf("%s/n",use[0].code);
        printf("///////////////////////////////////////////////n");}
      break;
    }
    if(strcmp(use1,use[1].user)<0||strcmp(use1,use[len].user)>0)
    {
      printf("**************************************/n");
      printf("     4用户名错误      /n");
      printf("***************************************/n"); 

      break;
    }
    if(strcmp(use1,use[i].user)==0&&strcmp(use[i].code,mima)!=0)
    {
      printf("**************************************/n");
      printf("     密码错误      /n");
      printf("***************************************/n"); 

      break;
    }
  }
}
/////////////////////////////////////////////////////////////////////////////
/*    学生信息管理系统的菜单函数-系统函数*/
////////////////////////////////////////////////////////////////////////////
int menu()
{
  int sn,i,j=0;
  char use1[30];
  char mima[30];
  int m=0;
  printf("     学生信息管理系统/n");
  printf("=========================================/n");
  printf("    1.学生信息的整体注册/n");
  printf("    2.学生信息的修改/n");
  printf("    3.学生信息的添加/n");
  printf("    4.学生信息的删除/n");
  printf("    5.学生成绩信息的录入/n");
  printf("    6.学生信息的查询/n");
  printf("    7.访问者密码的修改/n");
  printf("    8.恢复误删学生信息/n");
  printf("    0.退出学生信息管理系统/n");
  printf("==========================================/n");
  printf("请选择0-8:/n");
  while(1)
  {
    scanf("%d",&sn);
    if(sn==7)
      for(i=1;i<=len;i++)
      {
        strcpy(use[i].user,stud[i-1].num );
        strcpy(use[i].code,stud[i-1].num );
      }
      if(sn>1&&sn<7||sn==8)
      { 

        printf("请输入您的用户名:");
        scanf("%s",use1);
        printf("请输入您的密码:");
        while(1)
        {
          mima[j]=getch();
          if(mima[j]==13)
            break;
          putchar('*');
          j++;
        }
        mima[j]='/0';
        printf("/n");
        if(sn==6)
          if(strcmp(use1,use[0].user)!=0)
          {
            for(i=0;i<=len;i++)
            {
              if(strcmp(use1,use[i].user)==0&&strcmp(use[i].code,mima)==0)
              {
                if(i!=0)
             {
               printf("**************************************/n");
               printf("     您只能查找您本人的信息    /n");
               printf("***************************************/n");
               research1(use1);
               break;
             }
              }
              if(strcmp(use1,use[0].user)==0&&strcmp(use[0].code,mima)!=0)
           {
             printf("**************************************/n");
             printf("     密码错误      /n");
             printf("***************************************/n");
             while(1)
             {
               m++;
               if(m<3)
               {
                 printf("重新输入:/n");
                 printf("请输入您的用户名:");
                 scanf("%s",use1);
                 printf("请输入您的密码:");
                 j=0;
                 while(1)
                 {
                   mima[j]=getch();
                   if(mima[j]==13)
                     break;
                   putchar('*');
                   j++;
                 }
                 mima[j]='/0';
                 if(strcmp(use1,use[0].user)==0&&strcmp(use[0].code,mima)!=0)
                 {
                   printf("**************************************/n");
                   printf("     密码错误      /n");
                   printf("***************************************/n");
                 }
               }
               else
               {
                 sn=0;
                 break;
               }
             }
             sn=0;
             break;
              }
              if(strcmp(use1,use[1].user)<0||strcmp(use1,use[len].user)>0)
              {
                printf("**************************************/n");
                printf("     3用户名错误      /n");
                printf("***************************************/n");
                sn=0;
                break;
          }
              if(strcmp(use1,use[i].user)==0&&strcmp(use[i].code,mima)!=0)
           {
             printf("**************************************/n");
             printf("     密码错误      /n");
             printf("***************************************/n");
             while(1)
             {
               m++;
               if(m<3)
               {
                 if(strcmp(use1,use[i].user)==0&&strcmp(use[i].code,mima)==0)
                   {
                     printf("**************************************/n");
                     printf("     您没有权限来操作      /n");
                     printf("***************************************/n");
                     sn=0;
                     break;
                   }
                 printf("重新输入:/n");
                 printf("请输入您的用户名:");
                 scanf("%s",use1);
                 printf("请输入您的密码:");
                 j=0;
                 while(1)
                 {
                   mima[j]=getch();
                   if(mima[j]==13)
                     break;
                   putchar('*');
                   j++;
                 }
                 mima[j]='/0';
                 printf("/n");
                 if(strcmp(use1,use[i].user)==0&&strcmp(use[i].code,mima)!=0)
                 {
                   printf("**************************************/n");
                   printf("     密码错误      /n");
                   printf("***************************************/n"); 

                 }
                 else
                 {
                   printf("**************************************/n");
                   printf("     欢迎您登陆本系统      /n");
                   printf("***************************************/n");
                   research1(use1);
                      break;
                 }
                  }
               else
               {
                 sn=0;
                 break;
               }
             }
          }
            }
          }
          for(i=0;i<=len;i++)
          {
            if(sn==6)
              if(strcmp(use1,use[0].user)!=0)
             {
               sn=0;
               break;
             }
              if(strcmp(use1,use[i].user)==0&&strcmp(use[i].code,mima)==0)
              {
                if(i!=0)
                {
                  printf("**************************************/n");
                  printf("     您没有权限来操作      /n");
                  printf("***************************************/n");
               sn=0;
               break;
                }
                else
                {
                  printf("**************************************/n");
                  printf("     欢迎您登陆本系统      /n");
                  printf("***************************************/n");
                  break;
                }
              }
              if(strcmp(use1,use[0].user)==0&&strcmp(use[0].code,mima)!=0)
           {
             printf("**************************************/n");
             printf("     密码错误      /n");
             printf("***************************************/n"); 

             while(1)
             {
               m++;
               if(m<3)
               {
                 printf("重新输入:/n");
                 printf("请输入您的用户名:");
                 scanf("%s",use1);
                 printf("请输入您的密码:");
                 j=0;
                 while(1)
                 {
                   mima[j]=getch();
                   if(mima[j]==13)
                     break;
                   putchar('*');
                   j++;
                 }
                 mima[j]='/0';
                 printf("/n");
                 if(strcmp(use1,use[0].user)==0&&strcmp(use[0].code,mima)!=0)
                 {
                   printf("**************************************/n");
                   printf("     密码错误      /n");
                   printf("***************************************/n");
                 }
                   else
                   {
                     printf("**************************************/n");
                     printf("     欢迎您登陆本系统      /n");
                     printf("***************************************/n");
                      break;
                 }
               }
               else
               {
                 sn=0;
                 break;
               }
             }
             break;
              }
              if(strcmp(use1,use[1].user)<0||strcmp(use1,use[len].user)>0)
              {
                printf("**************************************/n");
                printf("     用户名错误      /n");
                printf("***************************************/n");
                sn=0;
                break;
          }
              if(strcmp(use1,use[i].user)==0&&strcmp(use[i].code,mima)!=0)
           {
             printf("**************************************/n");
             printf("     密码错误      /n");
             printf("***************************************/n"); 

             while(1)
             {
               m++;
               if(m<3)
               {
                 if(strcmp(use1,use[i].user)==0&&strcmp(use[i].code,mima)==0)
                   {
                     printf("**************************************/n");
                     printf("     您没有权限来操作      /n");
                     printf("***************************************/n");
                     sn=0;
                     break; 

                   }
                 printf("重新输入:/n");
                 printf("请输入您的用户名:");
                 scanf("%s",use1);
                 printf("请输入您的密码:");
                 j=0;
                 while(1)
                 {
                   mima[j]=getch();
                   if(mima[j]==13)
                     break;
                   putchar('*');
                   j++;
                 }
                 mima[j]='/0';
                 printf("/n");
                 if(strcmp(use1,use[i].user)==0&&strcmp(use[i].code,mima)!=0)
                 {
                   printf("**************************************/n");
                   printf("     密码错误      /n");
                   printf("***************************************/n"); 

                 }
               }
               else
               {
                 sn=0;
                 break;
               }
             } 

              }
          }
      }
      if (sn<0 || sn>8)
      {
        printf("/n/t输入错误,重选0-8/n");
        break;
      }
      else
        break;
  }
  return sn;
} 

/////////////////////////////////////////////////////////////////////////////////
/* 学生信息管理系统的主函数--系统函数*/
/////////////////////////////////////////////////////////////////////////////////
void main()
{
  struct student *head;
  int i,j=0;
  while(1)
  {
    switch(menu())
    {
    case 1:
      printf("**************************************/n");
      printf("      学生信息的整体注册      /n");
      printf("***************************************/n");
      head=create();
      FILE *fp;
      struct secret p;
      fp=fopen("d://mima.txt","rb");
      if(fp==NULL)
        printf("open error/n");
      else
      {
        for(i=0;i<=len;i++)
        {
          fread(&p,sizeof(struct secret),1,fp);
          strcpy(use[i].user,p.user);
          strcpy(use[i].code,p.code);
        } 

        fclose(fp);
      } 

      break; 

    case 2:
      printf("**************************************/n");
      printf("学生信息的修改/n");
      printf("**************************************/n");
      change(head);
      break;
    case 3:
      printf("**************************************/n");
      printf("学生信息的添加/n");
      printf("**************************************/n");
      head=insert(head);
      break;
    case 4:
      printf("**************************************/n");
      printf("学生成绩信息的删除入/n");
      printf("**************************************/n");
      head=del(head);
      break;
    case 5:
      printf("**************************************/n");
      printf("学生成绩信息的录入/n");
      printf("**************************************/n");
      head=chengji(head);
      break;
    case 6:
      printf("**************************************/n");
      printf("学生信息的查询/n");
      printf("**************************************/n");
      research(head);
      break;
    case 7:
      printf("**************************************/n");
      printf("访问者密码的修改/n");
      printf("**************************************/n");
      mimacli();
      break;
    case 8:
      printf("**************************************/n");
      printf("恢复误删信息/n");
      printf("**************************************/n");
      recover(head);
      break;
    case 0:
      printf("**************************************/n");
      printf("退出学生信息管理系统/n");
      printf("**************************************/n");
      printf("The end./n");
      return;
    default: printf("/n选择错误,请重选!/n");
      getchar();
      getchar();
    }
    system("cls");
  }
}

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

您可能感兴趣的文章:

  • C语言单链表版学生信息管理系统
  • C语言实现学生信息管理系统(单链表)
  • C语言学生信息管理系统小项目
  • C语言数组实现学生信息管理系统设计
  • C语言版学生成绩管理系统
  • C语言学生信息管理系统设计与实现
  • 基于C语言实现学生成绩管理系统
  • C语言实现通讯管理系统设计
  • C语言实现简单学生成绩管理系统
  • C语言利用结构体数组实现学生成绩管理系统
(0)

相关推荐

  • C语言实现通讯管理系统设计

    本文实例为大家分享了C语言实现通讯管理系统的具体代码,供大家参考,具体内容如下 #include<stdio.h> #include<string.h> #include<stdlib.h> typedef struct{ char num[5]; char name[9]; char sex[9]; char phone[13]; char addr[31]; }DataType; typedef struct node{ DataType data; struct

  • C语言学生信息管理系统小项目

    本文为大家分享了C语言学生信息管理系统小项目,供大家参考,具体内容如下 /* 运行环境:我是在linux里面用gcc编译的,在windows里应该也能运行,用的一些文件库函数都是c标准库,没有用linux的系统调用(纠正一下:system("clear")这个系统调用是linux的,windows里面用system("cls") ) (1)问题描述 学生信息包括:学号,姓名,年龄,性别,出生年月,地址,电话,E-mail等.试设计一学生信息管理系统,使之能提供以下功

  • C语言数组实现学生信息管理系统设计

    概述 单纯只用多个数组管理学生成绩信息,不使用结构体,该程序最主要的难点是依据学号或总成绩对学生信息进行排序,借助了临时数组来标记排好序的下标. 运行结果如下: 输入数据: 打印数据: 根据学号对信息进行排序: 根据总成绩对信息进行排序: 根据学号删除某一信息: 代码如下: #include <stdio.h> #include <stdlib.h> //exit函数头文件 #include <string.h> //字符串相关操作头文件 #define MAX_STU

  • 基于C语言实现学生成绩管理系统

    本文实例为大家分享了C语言实现学生成绩管理系统的具体代码,供大家参考,具体内容如下 这里只贴代码,具体介绍省略. #include <stdio.h> #include <io.h> #include <conio.h> #include <stdlib.h> #include <string.h> #define MAX 200 struct student { char no[10]; // 学号 char name[50]; // 姓名 f

  • C语言实现学生信息管理系统(单链表)

    本文实例为大家分享了C语言实现学生信息管理系统的具体代码,供大家参考,具体内容如下 /*copyright(c)2016.烟台大学计算机学院 * All rights reserved, * 文件名称:text.Cpp * 作者:吴敬超 * 完成日期:2016年7月1日 * 版本号:codeblock * * 问题描述: 学生信息管理系统 * 输入描述: * 程序输出: 输出结果 */ #include <stdio.h> #include <stdlib.h> #include

  • C语言利用结构体数组实现学生成绩管理系统

    要求: 某班有最多不超过30人(具体人数由键盘输入)参加期末考试,最多不超过6门(具体门数由键盘输入).定义结构体类型描述学生信息,每个学生信息包括:学号.姓名.多门课的成绩.总成绩和平均成绩.用结构体数组作为函数参数,编程实现如下菜单驱动的学生成绩管理系统. (1) 录入每个学生的学号.姓名和各科考试成绩. (2) 计算每门课程的总分和平均分. (3) 计算每个学生的总分和平均分. (4) 按每个学生的总分由高到低排出名次表. (5) 按学号由小到大排出成绩表. (6) 按姓名的字典顺序排出成

  • C语言版学生成绩管理系统

    本文实例为大家分享了C语言版学生成绩管理系统的具体代码,供大家参考,具体内容如下 #include<stdio.h> #include<stdlib.h> #include<time.h> #include<conio.h> #include<string.h> #include<algorithm> char buf[255]; char c=14; char path[]="D:\\data"; char tm

  • C语言单链表版学生信息管理系统

    本文实例为大家分享了C语言学生信息管理系统的具体代码,供大家参考,具体内容如下 代码: //以单链表作为存储结构,设计和实现课程成绩管理的完整程序. //程序包括如下功能. //1.建立学生成绩表,包含学生的学号.姓名和成绩. //2.可以显示所有学生成绩. //3.可以计算学生的总数. //4.可以按学号和序号查找学生. //5.可以在指定位置插入学生成绩数据. //6.可以删除指定位置的学生数据. //7.可以把学生成绩按从高到低的顺序排序. //作者: yinlinqvan //操作系统:

  • C语言学生信息管理系统设计与实现

    本文实例为大家分享了C语言学生信息管理系统的具体代码,供大家参考,具体内容如下 #include"stdio.h" //标准的输入输出函数文件头部说明 #include"math.h" // 数学函数头部说明 #include"string.h" #include"stdlib.h" //通过该函数头部里的函数,改变控制台的背景和颜色 #include"windows.h" //头文件声明,下文用到了改变控

  • C语言实现简单学生成绩管理系统

    本文实例为大家分享了C语言实现学生成绩管理系统的具体代码,供大家参考,具体内容如下 C语言小项目 实现一个学生成绩管理系统 系统功能: 1.实现所有学生成绩的录入(利用结构体数组),当输入字符为end时候,结束成绩的录入:  2.实现所有学生信息的输出  3.输入指定学生姓名,并能输出这名学生的信息  4.将学生成绩按照语文和数学成绩排序 思路: 1. 首先,先把这个小项目的框架打好.考虑要写几个文件,每一个文件里面实现怎样的功能.考虑到这个小项目的代码量以及程序的易读性,我决定将写三个文件.一

随机推荐