文档库 最新最全的文档下载
当前位置:文档库 › C语言学生成绩管理系统(输入输出删除插入查找排序)

C语言学生成绩管理系统(输入输出删除插入查找排序)

#include
#include
#include

#define MAXLEN 100
#define Null 0

/**************************/
int count = 0;
/**************************/
typedef struct node {
int num; // 学号
char name[MAXLEN]; // 姓名
/******************************/
char sex[2]; ///性别
//char sex;
/****************************/
float sum; //总分
float ave; ///平均分
int computer; ///计算机成绩
int english; ///英语成绩
int math; ///数学成绩
int chinese; //语文分数
struct node *next; // 指针域
}list;
/*************************/
void input(list *head) ///输入函数
/*************************/
{
list *p,*r;
int i,n; // n 为学生人数
/*
p=(list *)malloc(sizeof(list));
p->next=Null;
*/
r=head;
printf("请输入学生人数.\n");
scanf("%d",&n);

for(i=1;i<=n;i++)
{
p=(list *)malloc(sizeof(list));
printf("请输入学生学号:\n");
scanf("%d",&p->num);
printf("请输入学生性别:\n");
scanf("%s",&p->sex);
printf("请输入学生姓名:\n");
scanf("%s",&p->name);
printf("请输入语文成绩:\n");
scanf("%d",&p->chinese);
printf("请输入英语成绩:\n");
scanf("%d",&p->english);
printf("请输入数学成绩:\n");
scanf("%d",&p->math);
printf("请输入计算机成绩:\n");
scanf("%d",&p->computer);
(p->sum)=(p->chinese)+(p->computer)+(p->math)+(p->english);
(p->ave)=(p->sum)/4;
p->next=Null;
r->next=p;
r=r->next;
/********************/
count ++;
/********************/
}
}

void output(list *h) //输出函数
{
/************************/
if (h == NULL)
printf("记录为空!");
/*************************/
list *p;
printf("学号\t姓名\t性别\t语文成绩\t数学成绩\t英语成绩\t计算机成绩\t平均分\t总成绩\t\n");
p=h->next;
while (p!=NULL)
{
printf("%d\n\t%s\t%s\t%d\t%d\t%d\t%d\t%5.1f\t%5.1f\n",
p->num,p->name,p->sex,p->chinese,p->math,p->english,p->computer,p->ave,p->sum);
p=p->next;
}
}

void sortsum(list *head) ///总成绩排序
{
// struct node temp;
// const int n=20;
// int i,j,k;
// printf("按照总成绩排序:\t");
// for(i=0;i// {
// k=i;
// for(j=i+1;j// if(list[j].sum// k=j;
// temp=list[k];list[k]=list[i];list[i]=temp;
// output(p);
// }

int i=count, j, k;
printf("按照总成绩排序:\n");

if (count==0 || count==1)
{
return;
}

list *p, *temp;


while(i > 0)
{p=head;
for(j=0; j{

if(p->next->sum > p->next->next->sum)
{
temp = p->next ;
p->next = p->next->next;
temp->next = p->next->next;
p->next->next = temp;
}
p = p->next;
}
i--;
}
}
/*******************************************/
void sortnum(li

st *head)
{
int i=count, j, k;
printf("按照学号排序:\n");

if (count==0 || count==1)
{
return;
}

list *p, *temp;


while(i > 0)
{p=head;
for(j=0; j{

if(p->next->num > p->next->next->num)
{
temp = p->next ;
p->next = p->next->next;
temp->next = p->next->next;
p->next->next = temp;
}
p = p->next;
}
i--;
}
}
/*******************************************/
/*
int sortnum(node *list) ///学号排序
{
struct node temp;
const int n=20;
int i,j,k;
printf("按照总成绩排序:\t");

for(i=0;i{
k=i;
for(j=i+1;jif(list[j].num{
k=j;
temp=list[k];
list[k]=list[i];
list[i]=temp;
}
}

return 0;
}
*/
void find (list *h) ///查找函数
{
int k; // 要找的学生学号
list *p;
p=h->next;
printf("请输入要查找的学生学号:\n");
scanf("%d",&k);
while (p && p->num!=k)
p=p->next;
if(p)
{
printf("学号\t姓名\t性别\t语文成绩\t数学成绩\t英语成绩\t计算机成绩\t平均成绩\t总成绩\n");
printf("%d\t%s\t%s\t%d\t%d\t%d\t%d%5.1f\t%5.1f\n",p->num,p->name,p->sex,p->chinese,p->math,p->english,p->computer,p->ave,p->sum);
}
else
printf("目标没找到\n");
}


list *del (list *h) ///删除函数
{
int k; // 要删除的学生学号
list *p,*q;
q=h;
p=h->next;
printf("请输入待删除的学生学号:\n");
scanf("%d",&k);
while (p && p->num!=k)
{
q=p;
p=p->next;
}
if(p)
{
q->next=p->next;
free(p);
count --;
}
else
printf("没有此学生的记录,无法删除!\n");

return (h);
}


list *insert(list *h) //插入函数
{
list *p,*q,*r,*head;
head=h;
r=h;
p=h->next; // 下面构造一个学生的信息
q=(list *)malloc(sizeof(list));
printf("请输入待插入学生的学号:\n");
scanf("%d",&q->num);
printf("请输入待插入学生性别:\n");
scanf("%s",&q->sex);
printf("请输入待插入学生的姓名:\n");
scanf("%s",&q->name);
printf("请输入待插入的语文成绩:\n");
scanf("%d",&q->chinese);
printf("请输入待插入的英语成绩:\n");
scanf("%d",&q->english);
printf("请输入待插入的数学成绩:\n");
scanf("%d",&q->math);
printf("请输入待插入的计算机成绩:\n");
scanf("%d",&q->computer);
(q->sum)=(q->chinese)+(q->computer)+(q->math)+(q->english);
(q->ave)=(q->sum)/4;
q->next=Null; // 找到链表的结尾结点
count --;
while(p!=Null)
{
r=p;
p=p->next;
} // 将新结点插入表尾
r->next=q;
r=r->next;

return (head);
}


void main() //主函数
{
list *p;
/*****************************/
p=(list *)malloc(sizeof(list));
p->next=Null;
/*****************************/
int k; // 控制循环的标


while (1)
{
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(" ---------------------------------------\n");
printf("请输入你的选择\n");
scanf("%d",&k);
switch(k)
{
case 1:
// p=input();
/****************/
input(p);
/****************/
break;
case 2:find(p);
break;
case 3:p=insert(p);
break;
case 4:p=del(p);
break;
case 5:sortnum(p);
output(p);
break;
case 6:sortsum(p);
output(p);
break;
case 7:output(p);
break;
case 8:exit(0);
default:printf("选择错误,重新开始\n");
}
}
}

相关文档
相关文档 最新文档