实用标准
save()函数:用来保存数据,首先从用户输入取得要保存的文件名,然后定义一个指向文件的指针,以读写方式打开文件。将写生信息依次存入文件。
文案大全
实用标准
score *load()函数:用于读取数据,通过“r+”方式打开文件并判断是否打开成功。具体实现如下:
文案大全
实用标准
score *statistics()函数:它能实现程序的统计,通过switch-case语句选择统计方式,通过循环计算总分或者平均分并打印出来,流程都是通过循环,让指针逐个遍历整个链表,读取相应的数据并实现统计
3.2数据结构设计
数据结构:定义了一个包含学生成绩信息的结构体(struct scorenode{}),学生信息包括学号(number)、姓名(name[10])、语文、数学、英语成绩(chinese、mathmatic、english)、以及指向下一个结构体的链表指针(struct scorenode *next)。
3.3函数功能描述
文案大全
实用标准
main()函数:主函数功能主要是让程序选择将要进行的操作,通过menu()函数返回的选项进入其他函数执行。
int menu(int k)函数:此函数显示主菜单内容,需要一个int类型变量作为输入要执行的选项并返回给main()函数。
score *creatlink()函数:此函数用于创建链表,为了节省内存空间,我们采用malloc()函数为结构体分配动态内存空间。另外考虑到学号不可能是0,所以用输入0 的方式来判断是否结束输入,将最后的结构体中的指针指向NULL,并返回一个指向链表第一个结构的指针。
void print(score *head)函数:此函数返回值为空,知识为了在stdout流(屏幕)上打印出学生的成绩信息,需要一个指向链表头的指针来逐个向后打印。
score *add(score *head , score *stu)函数:为学生信息中添加新的学生资料,然后重新排序(按学号),并返回头指针。传入函数的head为链表头指针,stu指针指的是要添加的位置。
score *search(score *head)函数:按照学号查找学生信息,需要链表头指针并返回指向被搜索学生的指针。搜索原理就是从头向后面依次检索。
score *dele(score *head)函数:删除指定学生的资料。传入头指针,在函数中创建变量储存要删除学生的学号,然后从头向尾检索,直至找到该学生并将其删除,返回头指针。
score *sortdata(score *head)函数:用于按要求(学号、姓名、单科成绩)排序,最后返回头指针,排序运用老师上课时讲过的冒泡排序法。
int save(score *p1)函数:将链表内的数据以文件的形式储存,传入的p1指针一开始指向链表头,随着储存顺序一个一个地向后面指,直到NULL为止。函数内部定义一个指向文件的指针*fp,用于写入文件。
score *load(score *head)函数:读取文件数据,head为一个新建的链表头指针,读取文件数据之后令其保存至新建的链表之中,并返回头指针。
score *statistics(score *head)函数:统计成绩,可以统计总分、平均分、最
文案大全
实用标准
高(低)分,返回操作后的链表首地址(头指针)。
4、 程序实现
4.1源代码
#include
#include
#define LEN sizeof(struct scorenode) #define DEBUG
/*===========数据结构==========*/ struct scorenode {
int number; //学生学号 char name[10]; //学生姓名 float chinese; //语文成绩 float mathmatic; //数学成绩
float english; //英语成绩 struct scorenode *next; };
typedef struct scorenode score; //定义结构体变量
typedef struct scorenode *scoreptr; //定义结构体变量指针 int n,k;
/*n,k为全局变量,本程序中的函数均可以使用它,分别用于记数和标记*/
/*==========创建链表==========*/ /*返回一个指向链表头的指针*/ score *creatlink() {
score*head;
score *p1,*p2,*p3,*max; int i,j; float fen; char t[10]; n=0;
p1=p2=p3=(score *)malloc(LEN);head=p3; //开辟一个新单元
printf(\请输入学生资料,输0退出!\\n\
repeat1: printf(\请输入学生学号(学号应大于0):\学号应大于0
scanf(\ while(p1->number<0) {
文案大全
//输入学号,