这个大概分为七个主要的功能
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. 数据查询