编制一个C语言成绩记录簿,要求每个学生信息包括:学号、姓名、C语言成绩。具体功能: (1)创建信息

编制一个C语言成绩记录簿,要求每个学生信息包括:学号、姓名、C语言成绩。具体功能:
(1)创建信息链表并以磁盘文件保存;
(2)读取磁盘文件并显示输出所有学生的成绩;
(3)按学号或姓名查询成绩;
(4)添加成绩记录;
(5)修改指定姓名或学号的学生的成绩并可存盘;
(6)显示输出60分以下、60~79、80~89、90分以上各分数段的学生信息(可选项)。

很久很久以前写过一个

不过成绩并不是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个回答  2016-01-11
额额额 刚好写过追问

那可以说一下嘛 拜托拜托

追答

2458194647

在线

追问

在这不可以说嘛

追答需要有偿哈

定制完成,需要现金红包哦

相似回答