c语言课程设计成绩管理程序 包括录入删除查询排序等功能

如题所述

头文件

stumenu.h

#ifndef _STUMENU_H
#define _STUMENU_H
#include "student.h"
void main_menu(void);
/*程序主界面*/
void do_student(STUDENT *head,int num);
/*功能模块*/
int next_do(void);
/*输入代码*/
void exit_student(void);
/*退出程序*/
#endif

student.h

#ifndef _STUDENT_H
#define _STUDENT_H
#define MAX 1000
typedef struct data
{
    char name[10];
    char adress[100];
    char phone[12];
    int no;
    float chiness;
    float math;
    float english;
    float computer;
    float physic;
    float chemistry;
    float politic;
    float history;
    float all;
}DATA;
typedef struct student
{
    DATA data;
    int student_num;
    struct student *next;
}STUDENT;
#define MAL (STUDENT *)malloc(sizeof(STUDENT))
STUDENT *init_student(void);
/*初始化数据库,student_num=0,next指向NULL*/
int is_student_full(STUDENT *head);
/*检查数据库是否已满,满返回1否则返回0*/
int is_student_empty(STUDENT *head);
/*检查数据库是否为空,如为空返回1否则返回0*/
DATA input_student_info(void);
/*输入学生信息*/
void insert_student_data(STUDENT *head);
/*将data插入到学生信息数据库中*/
int get_student_num(STUDENT *head);
/*计算出当前数据库中学生的个数*/
void get_student_info(STUDENT *head,char *name);
/*查看name在数据库中的所有信息*/
int save_student_info(STUDENT *head);
/*将学生信息数据保存到文件中,如果成功返回1否则返回0*/
int read_student_info(STUDENT *head);
/*从文件中读学生信息,如果成功返回1,否则返回0*/
void print_student_info(STUDENT *head);
/*在屏幕中输出学生信息*/
void delete_student_info(STUDENT *head,char *name);
/*在数据库中删除name*/
void delete_student_all_info(STUDENT *head);
/*删除所有学生信息*/
void re_student_info(STUDENT *head,char *name);
/*修改name在数据库中的信息*/
void sort_student_num(STUDENT *head);
/*以总分排名次*/
#endif

实现代码

stumenu.c

#include "stdio.h"
#include "stumenu.h"
#include "student.h"
#include "stdlib.h"
void get_name(char *name);
char name[10];
void main_menu(void)
{
    printf("\t********************欢迎使用学生管理系统********************\n");
    printf("\t*   0.退出本程序                    1.检查数据库是否为空   *\n");
    printf("\t*   2.检查数据库是否已满            3.插入一个学生信息     *\n");
    printf("\t*   4.输出当前学生个数              5.查看指定学生信息     *\n");
    printf("\t*   6.保存学生信息到文件            7.加载学生信息         *\n");
    printf("\t*   8.输出所有学生信息              9.删除指定学生信息     *\n");
    printf("\t*  10.删除所有学生信息             11.修改指定学生信息     *\n");
    printf("\t   12.按学生成绩总分排序                                   *\n"); 
    printf("\t********************欢迎使用学生管理系统********************\n");
    printf("输入前面的数字可进行操作:");
}
int next_do(void)
{
    int num;
    scanf("%d",&num);
    while(num<0&&num>11)
    {
        printf("\n输入错误,请重新输入:");
        scanf("%d",&num);
    }
    return num;
}
void do_student(STUDENT *head,int num)
{
    switch(num)
    {
        case 1:
            if(is_student_empty(head))
                printf("数据库为空!\n");
            else
                printf("数据库不为空!\n");
            break;
        case 2:
            if(is_student_full(head))
                printf("数据库已满!\n");
            else
                printf("数据库未满!\n");
            break;
        case 3:
            insert_student_data(head);
            break;
        case 4:
            printf("当前学生个数为:%d\n",get_student_num(head));
            break;
        case 5:
            get_name(name);
            get_student_info(head,name);
            break;
        case 6:
            save_student_info(head);
            break;
        case 7:
            read_student_info(head);
            break;
        case 8:
            print_student_info(head);
            break;
        case 9:
            get_name(name);
            delete_student_info(head,name);
            break;
        case 10:
            delete_student_all_info(head);
            break;
        case 11:
            get_name(name);
            re_student_info(head,name);
            break;
        case 12:
            sort_student_num(head);
            break;
        case 0:
            exit_student();
        default:
            printf("输入错误,请重新输入!\n");
    }
}
void exit_student(void)
{
    printf("\t\t谢谢使用本程序,本程序由炕头哥亲情制作!\n");
    printf("\t\t按回车键退出. . .");
    while(getchar()!='\n')
        continue;
    getchar();
    exit(0);
}
void get_name(char *name)
{
    printf("请输入姓名:");
    scanf("%s",name);
}

student.c

#include "stdio.h"
#include "student.h"
#include "stdlib.h"
#include "string.h"
STUDENT *init_student(void)
{
    STUDENT *head;
    if(head->next==NULL)
        return;
    head=MAL;
    head->student_num=0;
    head->next=NULL;
    printf("初始化完成!\n");
    return head;
}
int is_student_full(STUDENT *head)
{
    if(head->student_num>=MAX)
        return 1;
    else
        return 0;
}
int is_student_empty(STUDENT *head)
{
    if(head->student_num==0)
        return 1;
    else
        return 0;
}
DATA input_student_info(void)
{
    DATA data;
    printf("请输入学生姓名:");
    scanf("%s",data.name);
    printf("\n请输入学号:");
    scanf("%d",&data.no);
    printf("\n请输入地址:");
    scanf("%s",data.adress);
    printf("\n请输入电话号码:");
    scanf("%s",data.phone);
    printf("\n请输入语文成绩:");
    scanf("%f",&data.chiness);
    printf("\n请输入数学成绩:");
    scanf("%f",&data.math);
    printf("\n请输入英语成绩:");
    scanf("%f",&data.english);
    printf("\n请输入物理成绩:");
    scanf("%f",&data.physic);
    printf("\n请输入化学成绩:");
    scanf("%f",&data.chemistry);
    printf("\n请输入政治成绩:");
    scanf("%f",&data.politic);
    printf("\n请输入历史成绩:");
    scanf("%f",&data.history);
    printf("\n请输入计算机成绩:");
    scanf("%f",&data.computer);
    data.all=data.chiness+data.math+data.english+data.computer+data.physic+data.chemistry+data.politic+data.history;
    return data;
}
void insert_student_data(STUDENT *head)
{
    if(is_student_full(head))
    {
        printf("数据已满,不能再插入数据!\n");
        return;
    }
    STUDENT *s,*r;
    float all;
    r=head;
    s=MAL;
    s->data=input_student_info();
    while(r->next!=NULL)
        r=r->next;
    r->next=s;
    s->next=NULL;
    head->student_num++;
}
int get_student_num(STUDENT *head)
{
    return head->student_num;
}
void get_student_info(STUDENT *head,char *name)
{
    STUDENT *r;
    r=head;
    while(r->next!=NULL)
        if((strcmp(r->next->data.name,name))==0)
        {
            printf("\n姓名:%s\n学号:%d\n家庭住址:%s\n电话:%s\n语文:%.1f\n数学:%.1f\n英语:%.1f\n物理:%.1f\n化学:%.1f\n政治:%.1f\n历史:%.1f\n计算机:%.1f\n总分:%.1f\n",name,r->next->data.no,r->next->data.adress,r->next->data.phone,r->next->data.chiness,r->next->data.math,r->next->data.english,r->next->data.physic,r->next->data.chemistry,r->next->data.politic,r->next->data.history,r->next->data.computer,r->next->data.all);
            break;
        }
        else
            r=r->next;
    if(r->next==NULL)
        printf("没有找到%s!\n",name);
}
int save_student_info(STUDENT *head)
{
    STUDENT *r;
    FILE *fp;
    if((fp=fopen("student_information.data","wb"))==NULL)
        return 0;
    for(r=head->next;r!=NULL;r=r->next)
        fwrite(r,sizeof(STUDENT),1,fp);
    fclose(fp);
    return 1;
}
int read_student_info(STUDENT *head)
{
    FILE *fp;
    if((fp=fopen("student_information.data","rb"))==NULL)
        return 0;
    STUDENT *r,*s;
    r=head;
    s=MAL;
    fread(s,sizeof(STUDENT),1,fp);
    while(!feof(fp))
    {
        r->next=s;
        r=s;
        head->student_num++;
        s=MAL;
        fread(s,sizeof(STUDENT),1,fp);
    }
    free(s);
    r->next=NULL;
    fclose(fp);
    return 1;
}
void print_student_info(STUDENT *head)
{
    if(is_student_empty(head))
    {
        printf("数据为空!\n");
        return;
    }
    STUDENT *r;
    int i=0;
    r=head;
    while(r->next!=NULL)
    {
        printf("\n%d.姓名:%s\n学号:%d\n家庭住址:%s\n电话:%s\n语文:%.1f\n数学:%.1f\n英语:%.1f\n物理:%.1f\n化学:%.1f\n政治:%.1f\n历史:%.1f\n计算机:%.1f\n总分:%.1f\n",i,r->next->data.name,r->next->data.no,r->next->data.adress,r->next->data.phone,r->next->data.chiness,r->next->data.math,r->next->data.english,r->next->data.physic,r->next->data.chemistry,r->next->data.politic,r->next->data.history,r->next->data.computer,r->next->data.all);
        r=r->next;
        i++;
        printf("\n\n\n");
    }
}
void delete_student_info(STUDENT *head,char *name)
{
    STUDENT *r,*q;
    r=head;
    if(is_student_empty(head))
        return;
    for(q=r->next;r!=NULL;r=q,q=q->next)
        if((strcmp(q->data.name,name))==0)
        {    
            STUDENT *temp;
            temp=r->next;
            r->next=q->next;
            free(temp);
            head->student_num--;
            break;
        }
    if(r==NULL)
        printf("没有找到%s!\n",name);

}
void delete_student_all_info(STUDENT *head)
{
    STUDENT *temp,*r;
    r=head->next;
    while(r!=NULL)
    {
        temp=r;
        r=r->next;
        free(temp);
        head->student_num--;
    }
}
void re_student_info(STUDENT *head,char *name)
{
    STUDENT *r;
    r=head;
    while(r->next!=NULL&&(strcmp(r->next->data.name,name))!=0)
        r=r->next;
    if(r->next==NULL)
    {
        printf("没有找到%s!\n",name);
        return;
    }
    r->next->data=input_student_info();
}
void sort_student_num(STUDENT *head)
{
    if(is_student_empty(head))
    {
        printf("数据库为空!\n");
        return;
    }
    STUDENT *temp,*q,*p;
    for(q=head;q->next!=NULL;q=q->next)
        for(p=q->next;p->next!=NULL;p=p->next)
    {
        if(p->next->data.all>q->next->data.all)
            if(q->next==p)
            {
                temp=p->next;
                p->next=p->next->next;
                temp->next=p;
                q->next=temp;
                p=temp;
            }
        else
        {
            temp=p->next;
            p->next=q->next;
            q->next=temp;
            temp=p->next->next;
            p->next->next=q->next->next;
            q->next->next=temp;
        }
    }
}

温馨提示:答案为网友推荐,仅供参考
第1个回答  推荐于2018-03-28
#include<stdio.h>
#include<stdlib.h>
#include<malloc.h>
#include<string.h>
struct sc
{
int chinese;
int maths;
int english;
};

typedef struct node
{
int num;
char name[20];
struct sc score;
struct node *next;
}st;

int menu()//菜单
{
int choice;
do{
system("cls");
printf("\t1.input the messega about a student\n");

printf("\t2.insect a messega of a new student\n");

printf("\t3.look for the messega\n");

printf("\t4.dellect the messega\n");

printf("\t5.arranging base on the number of learning\n");

printf("\t6.output all the messega\n");

printf("\t7.arranging base on all scores\n");

printf("\t8.exit the system\n");

printf("\tplease input your choice:");

scanf("%d",&choice);
}while(choice>7&&choice<1);
return choice;
}

st *create()//创建链表
{
st *head,*p,*tail;
char c;
head=tail=NULL;
while(c!='n'&&c!='N')
{

p=(st *)malloc(sizeof(st));
p->next=NULL;
printf("\t\tplease input the number of learning:");
scanf("%d",&p->num);

printf("\t\tplease input the name:");
scanf("%s",p->name);

printf("\t\tplease input the score of chinese:");
scanf("%d",&p->score.chinese);

printf("\t\tplease input the score of maths:");
scanf("%d",&p->score.maths);

printf("\t\tplease input the score of english:");
scanf("%d",&p->score.english);
if(head==NULL)

head=tail=p;
else
{
tail->next=p;
tail=p;
}

printf("\t\tcontinue or stop(Y/N):");
scanf("%s",&c);
}
return head;
}

st *arrange(st *head)// 以学号排名
{
st *p,*q;
int t,i=1,j,chinese,maths,english;
char name[20];
p=head;
if(head==NULL)
printf("\t\tNoting to arrange\n");
else
{
do
{
j=1;
while(p->next!=NULL)
{
q=p->next;
if(p->num>=q->num)
{
t=p->num;
p->num=q->num;
q->num=t;

strcpy(name,p->name);
strcpy(p->name,q->name);
strcpy(q->name,name);

chinese=p->score.chinese;
p->score.chinese=q->score.chinese;
q->score.chinese=chinese;

maths=p->score.maths;
p->score.maths=q->score.maths;
q->score.maths=maths;

english=p->score.english;
p->score.english=q->score.english;
q->score.english=english;

}
p=q;
j++;
}
p=head;
i++;
}while(i!=j);
}
return head;
}

st *arrangeall(st *head)//以总分排名
{
st *p,*q;
int t,i=1,j,chinese,maths,english;
char name[20];
p=head;
if(head==NULL)
printf("\t\tNoting to arrange\n");
else
{
do
{
j=1;
while(p->next!=NULL)
{
q=p->next;
if(p->score.chinese+p->score.maths+p->score.english<q->score.chinese+q->score.maths+q->score.english)
{
t=p->num;
p->num=q->num;
q->num=t;

strcpy(name,p->name);
strcpy(p->name,q->name);
strcpy(q->name,name);

chinese=p->score.chinese;
p->score.chinese=q->score.chinese;
q->score.chinese=chinese;

maths=p->score.maths;
p->score.maths=q->score.maths;
q->score.maths=maths;

english=p->score.english;
p->score.english=q->score.english;
q->score.english=english;

}
p=q;
j++;
}
p=head;
i++;
}while(i!=j);
}
return head;
}

st *insect(st *head,st *t)//插入学生的信息
{
st *p,*q;
p=head;
if(head==NULL)
printf("\tThe list is empty\n");
else
{

if(t->num==p->num)
{
head=t;
t->next=p;
}
else
{
while(p->next!=NULL)
{
q=p->next;
if(p->num<=t->num&&q->num>=t->num)
{
t->next=q;
p->next=t;
}
p=q;
}
p->next=t;
}
}
return head;
}

void output(st *head)//输出所以学生的信息
{
st *p;
int i=0;
float sum1=0,sum2=0,sum3=0;
p=head;
if(head==NULL)
{
printf("\tThere is nothing \n");
return;
}
else
{
printf("\tnumber name chinese maths english allscores\n");
while(p)
{
printf("\t %d ",p->num);
printf(" %s ",p->name);
printf(" %d ",p->score.chinese);
printf(" %d ",p->score.maths);
printf(" %d ",p->score.english);
printf("%6d",p->score.chinese+p->score.maths+p->score.english);
printf("\n");
p=p->next;
}

p=head;
while(p)// avrege scores
{
sum1+= p->score.chinese;
sum2+=p->score.maths;
sum3+=p->score.english;
p=p->next;
i++;
}
printf("\tarvege %.2f %.2f %.2f %.2f \n",sum1/i,sum2/i,sum3/i,(sum1+sum2+sum3)/i);

}
system("pause");
}

st *dellect(st *head,st *d)//删除学生的信息
{
st *p,*q;
char c;
p=head;
if(!(strcmp(p->name,d->name)))
{
head=p->next;
free(p);
}
else
{
while((strcmp(p->name,d->name))&&p->next!=NULL)
{
q=p;
p=q->next;
}
if(!(strcmp(p->name,d->name)))
{
printf("do you want to delete %S ?(Y/N):",p->name);
scanf("%s",&c);

if(c=='y'||c=='Y')
{
q->next=p->next;
free(p);
}
}
else
printf("\tThere isn't this name\n");
}

return head;
}

void find(st *head,st *s)//查找学生的信息
{
st *p,*q;
p=head;
if(head==NULL)
printf("\tThe list is empty\n");
else
{

while((strcmp(p->name,s->name))!=0&&p->next!=NULL)
{

q=p;
p=q->next;
}

if((strcmp(p->name,s->name))==0)

{
printf("\t %d ",p->num);
printf(" %s ",p->name);
printf(" chinese=%d ",p->score.chinese);
printf(" maths=%d ",p->score.maths);
printf(" english=%d ",p->score.english);
printf("all=%d",p->score.chinese+p->score.maths+p->score.english);
printf("\n");
}
else
printf("\tThe name is missing\n");
}
system("pause");
}

void main()//主函数
{
st *head,*t,*s,*d;
int choice;

for(;;)
{
choice=menu();
switch(choice)
{

case 1:
head=create();
break;

case 2:
t=(st *)malloc(sizeof(st));
t->next=NULL;
printf("\t\tplease input the number of learning:");
scanf("%d",&t->num);

printf("\t\tplease input the name:");
scanf("%s",t->name);

printf("\t\tplease input the score of chinese:");
scanf("%d",&t->score.chinese);

printf("\t\tplease input the score of maths:");
scanf("%d",&t->score.maths);

printf("\t\tplease input the score of english:");
scanf("%d",&t->score.english);

head=insect(head,t);
break;

case 4:

d=(st *)malloc(sizeof(st));
d->next=NULL;
printf("\twhice student do you want to dellect?please input the name:");
scanf("%s",d->name);
head=dellect(head,d);
break;

case 3:

s=(st *)malloc(sizeof(st));
s->next=NULL;
printf("\twhice student do you want to look for?please input the name:");
scanf("%s",s->name);
find(head,s);
break;

case 5:
head=arrange(head);//number
break;

case 6:
output(head);
break;
case 7:
head=arrangeall(head);//score
break;

case 8:
printf("\t\tThank you,goodbye\n");
exit(0);
}
}

}本回答被提问者和网友采纳
相似回答