学生管理系统
#ifndef _STUDENT_H_
#define _STUDENT_H_
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
typedef int datatype;
typedef float floattype;
typedef struct tagstudent
{
datatype id;
char name[10];
floattype score;
}student;
typedef struct Node
{
student xs;
int len;
struct Node* next;
struct Node* prio;
}stu;
void menu();
int empty(stu* S);
stu* creat();
int insert_head(stu* S);
int show(stu* S);
int delete(stu* S,char n[]);
stu* search_pos(stu* S,char n[]);
int revise(stu* S,char n[]);
int show_revise(stu* S,char n[]);
void fall_order(stu* S,int len);
#endif
#include"student.h"
void menu()
{
printf("*******1.输入学生信息\n");
printf("*******2.查看学生信息\n");
printf("*******3.删除学生信息\n");
printf("*******4.修改学生信息\n");
printf("*******5.查询学生信息\n");
printf("*******6.查询学生人数\n");
printf("*******7.降序学生分数\n");
printf("*******0.退出\n");
}
stu* creat()
{
stu* S=(stu*)malloc(sizeof(stu));
S->len=0;
S->next=NULL;
S->prio=NULL;
printf("创建成功\n");
return S;
}
int empty(stu* S)
{
return S->next==NULL?1:0;
}
int insert_head(stu* S)
{
int n;
stu* p=(stu*)malloc(sizeof(stu));
printf("输入学生id:");
scanf("%d",&p->xs.id);
printf("输入学生姓名:");
scanf("%s",p->xs.name);
printf("输入学生分数:");
scanf("%f",&p->xs.score);
if(empty(S))
{
p->prio=S;
S->next=p;
}else{
p->next=S->next;
p->prio=S;
S->next->prio=p;
S->next=p;
}
S->len++;
return 0;
}
int show(stu* S)
{
if(NULL==S||empty(S))
{
printf("没有学生信息\n");
return -1;
}
printf("学生信息如下\n");
stu* p=S->next;
while(p!=NULL)
{
printf("%d\t%s\t%.2f\n",p->xs.id,p->xs.name,p->xs.score);
p=p->next;
}
}
stu* search_pos(stu* S,char n[])
{
if(NULL==S||empty(S))
{
printf("查找失败\n");
return NULL;
}
stu* p=S->next;
while(strcmp(n,p->xs.name)!=0)
{
p=p->next;
}
return p;
}
int delete(stu* S,char n[])
{
if(NULL==S||empty(S))
{
printf("表为空,删除失败\n");
return -1;
}
stu*p=search_pos(S,n);
if(p->next==NULL)
{
p->prio->next=NULL;
free(p);
p=NULL;
}else{
p->next->prio=p->prio;
p->prio->next=p->next;
free(p);
p=NULL;
}
S->len--;
printf("删除成功\n");
return 0;
}
int revise(stu*S,char n[])
{
if(NULL==S||empty(S))
{
printf("没有学生信息,修改失败\n");
return -1;
}
stu* p=S->next;
while(p!=NULL)
{
if(strcmp(n,p->xs.name)==0)
{
printf("修改的分数为:");
scanf("%f",&p->xs.score);
show_revise(S,n);
}else{
printf("无法查到该学生\n");
return -1;
}
p=p->next;
}
return 0;
}
int show_revise(stu* S,char n[])
{
if(NULL==S||empty(S))
{
printf("表为空,查询失败\n");
return -1;
}
stu*p=S->next;
if(strcmp(n,p->xs.name)==0)
{
stu* p=search_pos(S,n);
printf("%d\t%s\t%.2f\n",p->xs.id,p->xs.name,p->xs.score);
}else{
printf("没有该学生\n");
}
return 0;
}
void fall_order(stu* S,int len)
{
if(NULL==S||empty(S))
{
printf("没有学生信息,降序失败\n");
return ;
}
stu* p=S->next;
if(len==1)
{
printf("只有一位学生\n");
printf("%d\t%s\t%.2f\n",p->xs.id,p->xs.name,p->xs.score);
}else
{
for(int i=1;i<len;i++)
{
stu* p=S->next;
stu* q=p->next;
for(int j=0; j<len-i;j++)
{
if(p->xs.score<q->xs.score)
{
if(q->next==NULL)
{
p->next=q->next;
q->prio=p->prio;
q->next=p;
p->prio->next=q;
p->prio=q;
}
else
{
p->next=q->next;
q->prio=p->prio;
q->next->prio=p;
p->prio->next=q;
q->next=p;
p->prio=q;
q=p->next;
}
}
else
{
p=p->next;
q=p->next;
}
}
}
show(S);
}
}
#include"student.h"
int main(int argc, const char *argv[])
{
int input=0;
char n[10];
stu* S=creat();
do
{
menu();
printf("选择功能:\t");
scanf("%d",&input);
switch(input)
{
case 1:
{
insert_head(S);
}break;
case 2:
{
show(S);
}break;
case 3:
{
printf("输入要删除的学生姓名:");
scanf("%s",n);
delete(S,n);
}break;
case 4:
{
printf("输入要修改分数的学生:");
scanf("%s",n);
revise(S,n);
}break;
case 5:
{
printf("输入要查看的学生:");
scanf("%s",n);
show_revise(S,n);
}break;
case 6:
{
printf("学生人数为%d人\n",S->len);
}break;
case 7:
{
fall_order(S,S->len);
}break;
case 0:
{
return -1;
}break;
default:
{
printf("重新输入\n");
}break;
}
}while(input);
return 0;
}