为了账号安全,请及时绑定邮箱和手机立即绑定

结构体链表学生信息管理系统_3

标签:
C
成绩删除 score_delete.c

#include <stdlib.h>
typedef struct Student
{
    char classs[20];//班级
    int num;//学号
    char name[20];//名字
    double score[5];//五科成绩
    double average;//平均成绩
    struct Student *next;//下一个地址
}stu;

extern n;

stu *score_delete(stu *head)//成绩删除
{
    stu *p=head;
    stu *pdel;
    for(;;)
    {
    printf("\n—————————————————————————————");
    printf("\n按学号查找删除输入1:           按姓名查找删除输入2:\n");
    printf("—————————————————————————————\n");
    int chose_1;
    chose_1=fied_judje();//判断输入是否正确
    if(chose_1==1)
    {
        printf("\n请输入需要查找删除的学生的学号:");
        int num;
        int lang=0;//判断是否存在所查学生
        scanf("%d",&num);
        int count=1;//要删除的链表中的第几个学生
        for(;p!=NULL;)
        {
            if(num==p->num)
            {

                lang=1;
                int i;
                pdel=head;

                if(count==1)
                    {head=head->next;
                    }
                else
                {   for(i=1;i<count-1;i++)
                    {
                        pdel=pdel->next;
                    }
                    if(count==n)
                        pdel->next=NULL;
                    else
                        pdel->next=pdel->next->next;
                    break;
                }
            }
            count++;
            p=p->next;
        }
        if(lang==0)
                printf("\<<n你所查学生不存在!>>");
    }else
    {
        printf("\n请输入需要查找删除的学生的姓名:");
        char name[20];
        int lang=0;//判断是否存在所查学生
        scanf("%s",&name);
        int count=1;//要删除的链表中的第几个学生
        for(;p!=NULL;)
        {
            if(!strcmp(name,p->name))
            {
                lang=1;
                int i;
                pdel=head;

                if(count==1)
                    {head=head->next;
                    }
                else
                {   for(i=1;i<count-1;i++)
                    {
                        pdel=pdel->next;
                    }
                    if(count==n)
                        pdel->next=NULL;
                    else
                        pdel->next=pdel->next->next;
                    break;
                }
            }
            count++;
            p=p->next;
        }
        if(lang==0)
                printf("\n你所查学生不存在!\n");
    }

    //删除完后的选择
    int chose_2;
    printf("\n—————————————————————————————");
    printf("\n退出查询删除请输入1:           继续查询删除请输入2\n");
    printf("—————————————————————————————\n");
    chose_2=fied_judje();//判断输入是否正确
    if(chose_2==1)return head;
    else continue;
    }
}
文件存储 file_conserve.c

#include <stdio.h>
typedef struct Student
{
    char classs[20];//班级
    int num;//学号
    char name[20];//名字
    double score[5];//五科成绩
    double average;//平均成绩
    struct Student *next;//下一个地址
}stu;
void file_conserve(stu *head)//文件存储
{
    stu *p=head;
    FILE *fp;
    fp = fopen ("save_stu.txt","w+");
    for(;p!=NULL;)
    {
         fprintf(fp,"%s\t%d\t%s\t%6.2lf\t%6.2lf\t6.2lf\t6.2lf\t%6.2lf\n",p->classs
                ,p->num,p->name,p->score[0],p->score[1],p->score[2]
                ,p->score[3],p->score[4]);
         p=p->next;
    }
    fclose(fp);
    printf("\n学生信息保存完成!\n");
}
文件输入  file_input.c

#include <stdio.h>
typedef struct Student
{
    char classs[20];//班级
    int num;//学号
    char name[20];//名字
    double score[5];//五科成绩
    double average;//平均成绩
    struct Student *next;//下一个地址
}stu;
void file_input(stu *head)//文件输入
{
    FILE *fp;
    stu out_txt;
    fp=fopen("student.txt","r");
    if(fp==NULL)
    {
        printf("文件打开失败");

    }

    else
    {
        printf("下面是学生的信息:\n");
        printf("班级:          学号:          姓名:          五门成绩:\n");
        while(fscanf(fp,"%s %d %s %lf %lf %lf %lf %lf",&out_txt.classs,&out_txt.num,
              &out_txt.name,&out_txt.score[0],&out_txt.score[1],&out_txt.score[2]
              ,&out_txt.score[3],&out_txt.score[4])!=EOF)
        {
            printf("%s        %d             %s         %6.2f %6.2f %6.2f %6.2f %6.2f\n",out_txt.classs,out_txt.num,
                    out_txt.name,out_txt.score[0],out_txt.score[1],out_txt.score[2],
                    out_txt.score[3],out_txt.score[4]);
        }

    }
}
文件导入  file_import.c

#include <stdlib.h>
typedef struct Student
{
    char classs[20];//班级
    int num;//学号
    char name[20];//名字
    double score[5];//五科成绩
    double average;//平均成绩
    struct Student *next;//下一个地址
}stu;

extern n,lang_ave;

stu *file_import(stu *head)//文件导入
{
    stu *head1=creatlist2(head);
    printf("\n<<学生信息导入成功!>>\n");
    lang_ave=0;
    return head1;
}
文件导入调用链表2 creatlist2.c

#include <stdlib.h>
#include <string.h>
#define LEN sizeof(stu)

typedef struct Student
{
    char classs[20];//班级
    int num;//学号
    char name[20];//名字
    double score[5];//五科成绩
    double average;//平均成绩
    struct Student *next;//下一个地址
}stu;
extern n;
stu *creatlist2(stu *head)
{
    FILE *fp;
    stu *p1,*p2;//p1开辟 p2末尾
    stu *head1;//如果有数据,把新数据添加到上一次链表的末尾
    stu temp;//中间变量

    p2=p1=(stu *)malloc(LEN);
    fp = fopen ("student.txt", "r+");
    if(n==0)
    {
        head=NULL;
        while(fscanf(fp,"%s %d %s %lf %lf %lf %lf %lf",&temp.classs,&temp.num,
              &temp.name,&temp.score[0],&temp.score[1],&temp.score[2]
              ,&temp.score[3],&temp.score[4])!=EOF)
        {
        n=n+1;
        if(n==1)head=p1;
        else p2->next=p1;
        p2=p1;
        strcpy(p1->classs,temp.classs);
        p1->num=temp.num;
        strcpy(p1->name,temp.name);
        p1->score[0]=temp.score[0];
        p1->score[1]=temp.score[1];
        p1->score[2]=temp.score[2];
        p1->score[3]=temp.score[3];
        p1->score[4]=temp.score[4];
        p1=(stu *)malloc(LEN);
        }
        p2->next=NULL;
        fclose(fp);
        return head;
    }
    else//已经存在录入的情况下可以继续导入
    {
        stu *p=head;
        int i;
        for(i=1;i<n;i++)
        {
            p=p->next;
        }
//        p->next=head1;
        int n1=0;
        while(fscanf(fp,"%s %d %s %lf %lf %lf %lf %lf",&temp.classs,&temp.num,
              &temp.name,&temp.score[0],&temp.score[1],&temp.score[2]
              ,&temp.score[3],&temp.score[4])!=EOF)
        {
        n=n+1;
        n1=n1+1;
        if(n1==1)p->next=p1;
        else p2->next=p1;
        p2=p1;
        strcpy(p1->classs,temp.classs);
        p1->num=temp.num;
        strcpy(p1->name,temp.name);
        p1->score[0]=temp.score[0];
        p1->score[1]=temp.score[1];
        p1->score[2]=temp.score[2];
        p1->score[3]=temp.score[3];
        p1->score[4]=temp.score[4];
        printf("%s",p1->classs);
        p1=(stu *)malloc(LEN);
        }
        p2->next=NULL;
        fclose(fp);
        head->average=0;
        return head;
    }
仅供参考,不足的地方还望原谅!!!
                                            **by:郑轻大学生**
点击查看更多内容
3人点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
今天注册有机会得

100积分直接送

付费专栏免费学

大额优惠券免费领

立即参与 放弃机会
意见反馈 帮助中心 APP下载
官方微信

举报

0/150
提交
取消