闲来无聊写了一个学生成绩管理系统,为了巩固下我结构体写的,是用链表实现的。可以进行删除,插入,修改,成绩排序。(链表是不循环单链表)
代码注释,呵呵 本人比较懒 也知道作为一名合格的程序员注释是必须有的 我把函数做了 注释大家不必研究总的,只需要看懂函数实现的功能.
对了,对于排序的问题本人没有用什么冒泡,插入排序,因为这种排序需要四个指针,我觉得自己会把自己弄晕。 所以,自己在排序的时候是把链表重建了,重建链表和冒泡啊 插入排序比起来更加简单容易理解。 关于其他的排序暂时没有去深究
呵呵。好啦下面贴代码,代码中问题多多 只要我一写程序bug肯定少不了。希望细心的你可以指出其中的不足以便于大家学习促进。
下面是程序里面有的函数:
void insert_data(struct student **phead , struct student *p); //插入函数,并把学生按学号插入到适当位置
void grade_sort(struct student **phead , struct student *p, int n); //成绩排序函数
void sortaver(struct student **phead,struct student *p); //平均成绩排序函数
void insertstudents(student **phead); //插入学生函数,并调用插入函数
void caculate_sumorave(struct student *head); //计算平均,总分函数
void showstudents(student *head); //打印学生成绩函数
void delect_student(struct student **head); //删除函数
void creat_list(struct student **phead); //创建函数
void update(student *head); //修改函数
void free_list(struct student *head) //释放内存函数
struct student *arrange( student *phead); //成绩排序函数
源代码:
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<conio.h>
#define debug 0
#define stdflush() while(getchar() != '\n')
#define LEN sizeof(student)
typedef struct student
{
long num;
char name[20];
char sex[2];
int socre1;
int socre2;
int socre3;
double aver;
int addtion;
struct student *next;
}student;
void insert_data(struct student **phead , struct student *p);
void insertstudents(student **phead)
{
struct student *p = NULL/*, *r = NULL,*/;
p = (student *)malloc(sizeof(student));
printf("\n\n");
if(p != NULL)
{
printf("请输入学生学号:");
scanf("%ld", &p->num);
stdflush();
while(p->num)
{
printf("请输入姓名:");
scanf("%s", p->name);
stdflush();
printf("请输入性别:");
scanf("%s",p->sex);
printf("请输入数学成绩:");
scanf("%d", &p->socre1);
stdflush();
printf("请输入英语成绩:");
scanf("%d", &p->socre2);
stdflush();
printf("请输入C语言:");
scanf("%d", &p->socre3);
stdflush();
insert_data(&(*phead),p);