C语言成绩管理系统(链表)

这个大概分为七个主要的功能

1.链表的增加

2.链表的修改

3.链表的删除

4.链表的查找

5.链表的排序

6.将写入的链表存入文件

7.每次打开程序将文件中的信息读取并保存到链表中

struct information
{
    char num[10];
    char name[10];
    char score[6][6];
    struct information* next;
};

首先你想写个这个东西,为后面的构造链表做准备

num是表示学生的学号,name是表示的学生的名字,score表示的是学生的成绩,因为用的是char类型,所以采用二维数组,struct information *next是表示的下一个节点的地址

struct information *head=NULL;

我采用了全局变量作为该链表的头

void get_information();//获取链表
void delete_information();//删除单个链表
void find_information();//查找
void change_information();//改变链表
void save_information();//保存文件
void read_information();//读取文件
void put_information();//输出文件保存到链表中
void sort_linklist();//链表排序
int judge_score(struct information *p1,int i);//判断成绩是否合法
int judge_number(struct information *p1);//判断学号是否合法且不相同
int judge_name(struct information *p1);//判断名字是否合法
void add_zero(int len, char* arr);//将12变成0012方便运算
void swep(char* p, char* q);//交换两个数据
void add_score(struct information* p1);//计算所有成绩之和

然后就是声明函数,最后三个函数是为了实现大数相加,就是你输入你的各科成绩,然后三个函数就能帮你实现他们的和(不过不能有小数点哦)

直接上代码

#pragma warning(disable:4996)
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include<conio.h>
struct information
{
    char num[10];
    char name[10];
    char score[6][6];
    struct information* next;
};
struct information *head=NULL;
void get_information();//获取链表
void delete_information();//删除单个链表
void find_information();//查找
void change_information();//改变链表
void save_information();//保存文件
void read_information();//读取文件
void put_information();//输出文件
void sort_linklist();//链表排序
int judge_score(struct information *p1,int i);//判断成绩是否合法
int judge_number(struct information *p1);//判断学号是否合法且不相同
int judge_name(struct information *p1);//判断名字是否合法
void add_zero(int len, char* arr);//将12变成0012方便运算
void swep(char* p, char* q);//交换两个数据
void add_score(struct information* p1);//计算所有成绩之和
int judge_name(struct information* p1)//这个判断名字是否合法,就是判断有没有数字,有的话就是不合法
{
    int i, j, len;
    len = strlen(p1->name);
    for (i = 0; i < len; i++)
    {
        if (p1->name[i] >= '1' && p1->name[i] <= '9') return 0;
    }
}
int judge_score(struct information* p1,int i)//判断成绩就是让语文,数学等科目不得高于150,综合不得高于300分
{
    int j,len;
    char scores[10];
    len = strlen(p1->score[i]);
    strcpy(scores, p1->score[i]);
    if (len > 3) return 0;
    for (j = 0; j < len; j++)
    {
        if (!('0' <= p1->score[i][j]&&p1->score[i][j]<='9'))
        {
            return 0;
        }
    }if (i != 3)
    {
        char sample[10] = "150";
        add_zero(len,scores);
        add_zero(3, sample);
        if (strcmp(sample,scores) < 0) return 0;
    }
    else
    {
        char sample[10] = "300";
        add_zero(len, scores);
        add_zero(3, sample);
        if (strcmp(sample,scores) < 0) return 0;
    }
    return 1;
}
int main()
{
    char war='1';//这块我用了浮点型
    read_information();
    while (war-48)
    {
        printf("**************************************\n");
        printf("*             通  信  录             *\n");
        printf("*          ===============           *\n");
        printf("*           0. 退出程序              *\n");
        printf("*           1. 数据录入              *\n");
        printf("*           2. 数据修改              *\n");
        printf("*           3. 数据查询     
  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值