求助C语言!!!!!要求编写一个学生信息管理系统的C语言代码

2024-11-02 04:31:04
推荐回答(2个)
回答1:

#include
#include
#include
#include 
#define N 30
void save();
struct student
{
 char student_id[N];   //学号
 char name[N];    // 姓名
 char age[N];          // 年龄
 char gender[N];      //性别
 char born[N];    //出生年月
 char address[N]; //地址
 char number[N];       //电话号码
 char E_mail[N];  //电子邮箱
 struct student* next;
};
struct student *head;

//登陆模块
int LogIn()
{
 char a[30],b[30];
 int cout = 0;
L: while( cout < 3 )
 {
  printf( "请输入账号:" );
  scanf( "%s",&a);
  fflush(stdin);
  printf( "请输入密码:" );
  scanf( "%s",&b);
  fflush(stdin);
  if( (strcmp( a,"luohai") != 0) || (strcmp( b,"123456") != 0))
  {
   cout ++;
   printf("警告:登陆错误,您还有 %d 次机会。\n",3-cout);
   goto L;
  }
  else
  {
   printf( "\n登陆成功,正在努力加载......\n" );
   Sleep(500);
   system( "cls");
   return 1;
  }
 }
 printf("登陆三次失败,退出!\n");
 exit(0);
}
//输入学生信息
void Great_Stu()
{
 char a;
 struct student *p1,*p2;  // p2建立新节点
 do{
  p2 =(struct student *)malloc(sizeof(struct student));
  p2 ->next = NULL;
  if( head == NULL )   //若为空表 直接接入表头
  {
   printf("请依次输入:学号   姓名  年龄  性别 出生年月  地址  电话号码  邮箱\n");
   scanf("%s %s %s %s %s %s %s %s",&p2->student_id,&p2->name,&p2->age,&p2->gender,&p2->born,&p2->address,&p2->number,&p2->E_mail);
   head = p2;
  }
  else
  {
   p1 = head;
   while( p1 ->next != NULL )
   {
    p1 = p1 ->next;
   }
   p2 =(struct student *)malloc(sizeof(struct student));
   p2 ->next = NULL;
   printf("请依次输入:\n学号   姓名  年龄  性别 出生年月  地址  电话号码  邮箱\n");
   fflush(stdin);
   scanf("%s %s %s %s %s %s %s %s",&p2->student_id,&p2->name,&p2->age,&p2->gender,&p2->born,&p2->address,&p2->number,&p2->E_mail);
   p1 -> next = p2;    
  }
  fflush(stdin);
  printf("是否继续输入(y/n)\n");
  scanf("%c",&a);
 }while(a == 'y' || a == 'Y');
 
}
//保存到文件
void save()
{
 FILE *fp;
 struct student *p;
 p = head;
 if( (fp = fopen("student.txt","w")) == NULL )
 {
  printf("打开失败!\n");
 }
 else
 {
  while( p != NULL )
  {
   fprintf(fp," %s %s %s %s %s %s %s %s",p->student_id,p->student_id,p->name,p->age,p->gender,p->born,p->address,p->number,p->E_mail);
   p = p->next;
  }
  printf("文件保存成功!\n\n");
 }
 fclose(fp);
 return ;
}
//打开文件信息
void open()
{
 FILE *fp = NULL;
 struct student *p1,*p2;
    p1 = p2 = (struct student *)malloc(sizeof(struct student));
 fp = fopen( "student.txt","r");
 if( fp== NULL )
 {
  printf("该文件没有任何信息记录!\n");
  return ;
 }
 head = p1;
 while(!feof(fp))
 {
  fflush(stdin);
  fscanf(fp,"%s %s %s %s %s %s %s %s",&p2->student_id,&p2->name,&p2->age,&p2->gender,&p2->born,&p2->address,&p2->number,&p2->E_mail);
  p1 ->next = p2;
  p1 =p2;
  p2 = (struct student *)malloc(sizeof(struct student));
  p1 ->next = NULL;
 }
 fclose(fp);
 printf("成功打开文件!\n");
 return;
}
//浏览学生信息
void display()
{
 struct student *temp;
 temp = head ;
 if( temp == NULL )
  printf("无学生信息记录!\n");
 else
 {
  printf("\n您输入的学生信息为:\n\n");
  printf("学号   姓名  年龄  性别 出生年月  地址  电话号码  邮箱\n");
  while( temp  != NULL )
  {
   printf("%s %s %s %s %s %s %s %s",temp->student_id,temp->name,temp->age,temp->gender,
    temp->born,temp->address,temp->number,temp->E_mail);
   if(temp ->next != NULL)
    temp = temp->next;
   else
   { printf("\n");
   return ;
   }
   printf("\n");
  }
 }
}
//按姓名查找
void search_name()
{
 char name1[30];
 struct student *p;
 p = head;
 printf( "请输入查找的姓名:");
 fflush(stdin);
 scanf("%s",name1);
 while( p != NULL)
 {
  if( (strcmp(name1,p->name)) == 0 )
  {
   printf("您查找的学生信息为:\n");
   printf("学号   姓名  年龄  性别 出生年月  地址  电话号码  邮箱\n");
   printf("%s %s %s %s %s %s %s %s\n",p->student_id,p->name,p->age,p->gender,
    p->born,p->address,p->number,p->E_mail);
   return ;
  }
  else
  {
   p = p ->next;
  }
 }
 printf("查无此人!\n");
}
//按学号查找
void search_id()
{
 char id[30];
 struct student *p;
 p = head;
 printf( "请输入查找的学号:");
 fflush(stdin);
 scanf("%s",id);
 while( p != NULL)
 {
  if( (strcmp(id,p->student_id)) == 0 )
  {
   printf("学号   姓名  年龄  性别 出生年月  地址  电话号码  邮箱\n");
   printf("%s %s %s %s %s %s %s %s\n",p->student_id,p->name,p->age,p->gender,
    p->born,p->address,p->number,p->E_mail);
   return ;
  }
  else
  {
   p = p ->next;
  }
 }
 printf("对不起,查无此人!\n");
}

//查找
void search()
{
 int i;
 struct student *p;
 p = head;
 printf("请输入查找方式:1.按姓名查找  2.按学号查找:");
 scanf("%d",&i);
 switch(i)
 {
 case 1:
  search_name();
  break;
 case 2:
  search_id();
  break;
 default:
  printf("输入无效。\n");
 }
}
//增加学生信息  插入到表尾
void add_imformation()
{
 struct student *p3,*p4;
 p3 = head;
 if( p3 == NULL)
  Great_Stu();
 else
 {
  while( p3 ->next != NULL )
  {
   p3 = p3 ->next;
  }
  p4 =(struct student *)malloc(sizeof(struct student));
  p4 ->next = NULL;
  fflush(stdin);
  printf("请依次输入您要增加的学生信息:\n学号   姓名  年龄  性别 出生年月  地址  电话号码  邮箱\n");
  scanf("%s %s %s %s %s %s %s %s",&p4->student_id,&p4->name,&p4->age,&p4->gender,&p4->born,&p4->address,&p4->number,&p4->E_mail);
  p3 -> next = p4;    
  printf("增加学生信息成功!\n\n");
 }
}
//修改数据
void Modify()
{
 struct student *p;
 char name2[N];
 printf("请输入你想修改的学生姓名:");
 scanf( "%s", &name2);
 p = head;
 while( p != NULL )
 {
  if( (strcmp(name2,p->name)) == 0 )
  {
   printf("该学生信息为:\n");
   printf("学号   姓名  年龄  性别 出生年月  地址  电话号码  邮箱\n");
   printf("%s %s %s %s %s %s %s %s\n",p->student_id,p->name,p->age,p->gender,
    p->born,p->address,p->number,p->E_mail);
   fflush(stdin);
   printf("您将修改为:\n");
   scanf("%s %s %s %s %s %s %s %s",&p->student_id,&p->name,&p->age,&p->gender,&p->born,&p->address,&p->number,&p->E_mail);
   return;
  }
  else
   p = p ->next;
 }
 printf(" 修改数据成功!\n\n");
}
//删除数据
void Delet()
{
 char num[N],c;
 printf("请输入你要删除的学生的学号:\n");
 scanf("%s",&num);
 struct student *p1, *p2;
 p1 = head;
 if( p1 == NULL )
 {
  printf("无任何学生信息记录!\n");
  return ;
 }
 p2 = p1 ->next;
 if( (strcmp(num,p1 ->number)) == 0)  //删除数据在链表头
 {
  printf( "该生的信息为:\n");
  printf("学号   姓名  年龄  性别 出生年月  地址  电话号码  邮箱\n");
  printf("%s %s %s %s %s %s %s %s\n",p1->student_id,p1->name,p1->age,p1->gender,
   p1->born,p1->address,p1->number,p1->E_mail);
  printf("确认删除该学生信息?(y/n)\n");
  fflush(stdin);
  scanf("%c",&c);
  if(c == 'y' || c =='Y' )
  {
   head = p2;
   printf("成功删除该学生信息!\n");
   free(p1);
   return ;
  }
  else
   return ;
 }
 else
 {
  while( p2 != NULL )
  {
   if( (strcmp(num,p2->number)) == 0 )
   {
    printf( "该生的信息为:\n");
    printf("学号   姓名  年龄  性别 出生年月  地址  电话号码  邮箱\n");
    printf("%s %s %s %s %s %s %s %s\n",p2->student_id,p2->name,p2->age,p2->gender,
     p2->born,p2->address,p2->number,p2->E_mail);
    printf("确认删除该学生信息?(y/n)\n");
    fflush(stdin);
    scanf("%c",&c);
    if(c == 'y' || c =='Y' )
    {
     p1 -> next = p2 -> next ;
     free(p2);
     printf("成功删除该学生信息!\n");
     return ;
    }
    else
     return ;
   }
   else if( p2 ->next != NULL)
   {
    p1 = p1 ->next;
    p2 = p2 ->next;
   }
  }
  printf("删除该学生信息失败.\n");
 }
}
 
//退出系统
int quit()
{
 char ch;
 printf( "确定退出?(y/n)\n" );
 fflush(stdin);
 scanf("%c",&ch);
 if( ch == 'Y'|| ch == 'y' )
  return 0;
 else
 {
  return 1;
 }
}

int main()
{
 int choose;
 printf(" ----******************************----\n");
 printf("       *  欢迎登陆学生管理系统  *\n");
 printf(" ----******************************----\n");
 printf("请登陆:\n");
 LogIn();
 printf(" ----******************************----\n");
 printf("       *     学生管理系统  *\n");
 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("   ◇        9.退出系统             ◇ \n");
 printf("---------------------------------------\n");
H: printf("请选择功能:");
 fflush(stdin);
 scanf("%d",&choose);
 switch(choose)
 {
 case 1 :
  Great_Stu();
  break;
 case 2 :
  display();
  break;
 case 3:
  search();
  break;
 case 4:
  add_imformation();
  break;
 case 5:
  Modify();
  break;
 case 6:
  Delet();
  break;
 case 7:
  save();
  break;
 case 8:
  open();
  break;
 case 9 :
  {
   if( quit() == 0 )
    exit(0);
   else
    goto H;
  }
  break;
 default:
  {
   printf("输入有误,请重新输入:\n");
   goto H;
  }
 }
 
 goto H;
 return 0;
}

回答2:

已发送QQ请求。