C语言链表实现班级管理系统

     上次用结构体数组做了一个图书管理系统,这次决定用链表实现一个简单的班级管理系统,还是先用create()函数第一次输入内容,之后使用可以直接从文件中读取。
#include<stdio.h>
#include<stdlib.h>
#define M 20


//定义学生的结构体
 typedef struct noab
 {
    int id;
    char name[M];
    char classroom[M];
    float score;
    struct node *next;
 }student;
student *init()
{
    student *p,*q,*head;
    int i,a;
    int n=0;
    printf("输入学生信息的个数\n");
    scanf("%d",&a);

    head=NULL;
    for(i=0;i<a;i++)
    {
        p=(student *)malloc(sizeof(student));
        printf("输入第%d个学生的信息\n",i+1);
        printf("学号:");
        scanf("%d",&p->id);
        printf("姓名:");
        getchar();
        gets(p->name);
        printf("班级:");
        gets(p->classroom);
        printf("成绩:");
        scanf("%f",&p->score);
        n=n+1;
        if(n==1)
        {
            head=p;
            q=p;
            q->next=NULL;

        }else
        {
            q->next=p;
            q=p;
            p->next=NULL;
        }
    }
    return head;
}
void display (student *head)
{
    student *p=head;
    while(p)
    {
        printf("学生的学号为%d,姓名为%s,班级为%s,分数为%f\n",p->id,p->name,p->classroom,p->score);
        p=p->next;
    }
}

student *addStudent(student *head)
{
    student *p,*q;
    q=head;
    while(q->next) q=q->next;
     p=(student *)malloc(sizeof(student));
        printf("学号:");
        scanf("%d",&p->id);
        printf("姓名:");
        getchar();
        gets(p->name);
        printf("班级:");
        gets(p->classroom);
        printf("成绩:");
        scanf("%f",&p->score);
        p->next=NULL;
        q->next=p;
        return head;
}

student *deleteStudent(student *head)
{
    int a;
    student *pre=NULL,*p;
    printf("请输入要删除的id");
    scanf("%d",&a);
    if(!head) {printf("系统中已经没有数据可以删除\n");return head;}
    p=head;
    while(p&&p->id!=a)
    {
        pre=p;
        p=p->next;
    }
    if(p)
    {
        if(!pre) head =head->next;
        else pre->next=p->next;
        free(p);
    }
    return head;

}

student *correctStudent(student *head)
{
    int a;
    student *p;
    printf("请输入要修改的学生的id");
    scanf("%d",&a);
    if(!head) {printf("系统中已经没有数据可以修改\n");return head;}
    p=head;
    while(p&&p->id!=a)
    {
        p=p->next;
    }
    if(p==NULL){printf("没有查到要修改的学生的id\n");return head;}
    else
    {
        printf("学号:");
        scanf("%d",&p->id);
        printf("姓名:");
        getchar();
        gets(p->name);
        printf("班级:");
        gets(p->classroom);
        printf("成绩:");
        scanf("%f",&p->score);
    }
    return head;
}
void writeFile(student *head)
{
    FILE *outf;
    student *p=head;
    if((outf = fopen("data.txt","wb")) == NULL) {
        printf("不能打开数据文件。\n");
        exit(1);
    }
    while(p) {
        fwrite(p,sizeof(student),1,outf);
        p = p->next;
    }
    fclose(outf);
}

student *readFile(student *head)
{
    int n=0;
    student temp;
    FILE *inf;
    student *p=NULL,*q;
    if((inf = fopen("data.txt","rb")) == NULL) {
        printf("不能打开数据文件。\n");
        exit(1);
    }
    while(fread(&temp,sizeof(student),1,inf)!=0)
    {
        p=(student *)malloc(sizeof(student));
        p->id=temp.id;
        p->score=temp.score;
        strcpy(p->name,temp.name);
        strcpy(p->classroom,temp.classroom);
        n++;
        if(n==1){head=p;q=p;}
        else
        {
            q->next=p;
            q=q->next;
        }

    }
    q->next=NULL;
    fclose(inf);
    return head;
}

void main()
{
    int a;
    student *head,*p;
    //head=init();
    head=readFile(head);

    do
    {
       printf("欢迎使用学生管理系统\n");
       printf("1:增加学生\n2:删除学生\n3:修改信息\n4:显示所有信息\n5:退出系统\n");
       printf("请输入您想进行的操作是:\n");
       scanf("%d",&a);
       switch(a)
       {
           case 1:head=addStudent(head);break;
           case 2:head=deleteStudent(head);break;
           case 3:head=correctStudent(head);break;
           case 4:display(head);break;

       }

   }while(a != 5);
   writeFile(head);

}

一、软件开发目的 该软件主要是使用C语言设计开发一个简单的班级同学信息管理系统,实现对班级同学信息录入和管理功能。 二、数据结构 程序中采用结构体数组存储班级同学的信息。结构体成员包括:姓名,学号,宿舍,QQ号码和电话号码等。数组的长度不超过70。 三、软件功能说明 1.学生信息的录入和保存 首先提示输入学生人数,接着是分别输入每个学生的信息包括:姓名,学号,宿舍,QQ号码和电话号码等。在录入数据的同时,系统将对信息的合法性进行检验(学号范围为1~70),若用户录入了不合法的数据系统应作出提示,并且要求重新输入。录入完毕后系统保存全部学生相关信息。 2.显示学生信息 将学生信息在屏幕上列表输出。要求先显示提示信息“姓名 学号 宿舍 QQ号码 电话号码”,然后再显示学生信息,每行显示一名学生的信息。 3.查询学生信息 按学号查询,输出学生姓名 学号 宿舍 QQ号码 电话号码。 按姓名查询,输出学生姓名 学号 宿舍 QQ号码 电话号码。 4.修改信息 按学号或姓名修改, 只能修改学生的“宿舍、QQ号码、电话号码”。(要求输入密码) 5.删除学生信息 通过学生的学号对某个学生全部信息进行删除,并将删除后的学生信息列表输出,以方便用户确认。 6.追加学生信息 输入新学生的相关信息,将新的信息插入原学生信息清单中,并将新的学生信息列表输出,以方便用户确认。 7.排序 (1)按照学号排序显示所有同学的纪录 (2)按照姓名排序显示所有同学的纪录 8.退出系统,结束任务。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值