本系统的代码冗余还是蛮多的,其实可以再精简很多,可是后期自己懒得改了,这里强调一个思想----代码复用,这会大大节约自己的编程量,也可以使自己看待一个向项目有宏观的思想。关于这个系统,是采用单链表和文件写的,单链表在数据录入部分已经按照学号排好序,后期的数据输出也即很方便看待数据,其实可以在后期进行排序,我的想法有两种,①创建一个结构体数组,把数据重新导入结构体数组中,再进行快速排序;②使用指针,不过这对数据结构以及指针的要求很高,基础不扎实还是不要乱试;不然会出现大量改也不知道怎么改的bug;关于文件部分 其实文件有大量的方法写入 比如二进制也可以 ,写起来都差不多 不过从文件读出来 和 写进去文件 的部分得多种方法试试 这样就可以加强基础了。 关于指针 这是头疼的问题 总之不能乱用 。关于链表的部分 看数据结构的基础了 这是数据结构最简单的部分 不过得细心和足够的耐心。
系统的图片如下:
以下为本系统的部分源码内含注释:
# include <stdio.h>
# include <conio.h>
# include <malloc.h>
# include <stdlib.h>
struct Node
{
int num;
int age;
char name[30];
char sex[5];
int sroce;
struct Node *next;
};
Node *head;
Node *Load() //载入文件中的数据到结构体中
{
FILE *fp;
Node *cur,*p,*q;
cur = NULL;
fp = fopen("Student","r"); //以"r"形式打开student的文件
if(fp == NULL) //如果文件不存在
{
fp = fopen("Student","w"); //创立一个student文件
fclose(fp); //关闭文件
return cur; //返回链表中,存入head
}
p=(struct Node*)malloc(sizeof(struct Node)); //如果存在
if(fread(p,sizeof(struct Node),1,fp) != 1) //判断文件中的数据 是否只有1个
return cur; //是就返回
cur = p;
while(!feof(fp)) //否则就开始从文件中读数据
{
q = p;
p = (struct Node *)malloc(sizeof(struct Node));
fread(p,sizeof(struct Node),1,fp);
q -> next = p;
}
q -> next = NULL;
free(p); //释放指针p所指向的内存空间
fclose(fp);
return cur; //返回链表中,存入head
}
void Interface() //主界面函数
{
system( "cls" ); //清屏函数
printf("\n\n\n");
printf("\t------------------------------