大家好,欢迎来到IT知识分享网。
1.录入学生信息2.打印学生信息3.保存学生信息4.读取学生信息5.统计学生信息6查找学生信息7修改某个学生的信息
难点的处理
1.文件的操作
数据写入文件
fp:fopen的时候关键字 w,r a 都需要小写.
p = head;
while(p != NULL)
{
fprintf(fp,”%s,%d,%d,%d”,p->stu.name,p->stu.number,p->st.age,p->stu.score);
p = p->next;
}
//写入文件的时候,尽可能添加/n,以防止 头尾相接….成一个运算符或者数字
读出文件
while(!feof(fp))
{
Node *node = malloc…
fscaf(fp,”%s,%d,%d,%d\n”,node->stu.name,&node->stu.number,…..);
//写入的格式和写出的格式相同才行.
if(head == null)
{
head = node;
p =head
}
else
p->next = node;
if(p->next != NULL)
p = node;
}
2.节点的删除
当我们移除某个节点并重新连接之后,一定要free(the Node),放置空间的占用.
while(p -> next != null)
if(p->next->stu.number == num)
{
node *p2;
p2 = p->next;
if(p2->next != null)
p->next = p2->next;
else
p->next = null;
p = p->next;
free(p2);
}
在实现的时候出现了几个难点.再次阐述下自己的想法.
1.我们需要把头指针 NodeLinkList定义在什么位置?
一般来说,我们在定义 head 的时候,定义在 main函数中.这也是我以前的作法.今天我把这个head 定义在 全局变量上,而不是在mian函数中.这样子的话,我再定义函数的时候 直接就调用了这个head ,省去了在函数参数中传值那样的麻烦操作.
NodeLinkList head = NULL; //1.录入学生信息
仔细看看我的函数实现代码,就会发现,我基本没有使用参数,就是因为我把head 定义在了外边.真的很不错的感觉~
2.文件的载入
//3.保存学生信息 void saveStudent() { printf("\n存储学生信息到文件:\n"); NodeLinkList p = head; FILE *fp; char lastfilename[20]; char prefileName[50] = "/Users/len/Desktop/"; printf("请输入文件夹名称:"); scanf("%s",lastfilename); char *filename = strcat(prefileName, lastfilename); printf("文件夹路径为: %s\n",filename); if (!(fp = fopen(filename, "a"))) { printf("文件打开失败.\n"); } else { while (p) { fprintf(fp, "%d\t%s\t%d\t%f\n",p->stu.id,p->stu.name,p->stu.age,p->stu.score); p = p->next; } printf("文件保存成功!\n"); } fclose(fp); }
当我在文件载入的时候,考虑到了 结构体之间的间距用什么来表示呢 ?起初用的时 ” “,发现能够成功执行.
后来就改为了 /t /n.fscaf 里面是可以使用 /t /n的.这和 scanf 函数可是一个很大的区别哦
我感觉文件的输入输出和 控制台的输入输出恰恰相反有木有?
3.文件的加载
说文件的加载,有点宽泛,恰当的说应该是结构体文件的加载.说实话这可真的难倒我了. 刚开始的时候想使用 !feof(fp)来实现加载,但是没有成功.
后来就是用了
while( fscanf(fp, "%d%s%d%f",&newNode->stu.id,newNode->stu.name, &newNode->stu.age,&newNode->stu.score) != EOF) { }
来实现加载.我们应该理解到 fscanf文件的加载是读取完之后 fp指针下移.
而且,我们在实现文件的加载的时候, 一定要记住 p指针的响应移动,这样子可以减小时间复杂度.
代码如下:
else { newNode = malloc(sizeof(Node)); while( fscanf(fp, "%d%s%d%f",&newNode->stu.id,newNode->stu.name, &newNode->stu.age,&newNode->stu.score) != EOF) { p->next = newNode; newNode->next = NULL; p = newNode; newNode = malloc(sizeof(Node)); }
好了,完整的代码有啦~~如下:
但是有一个提醒,这个文件加载之后会多出来一行 0 0 0 0.0的问题,暂时还没有解决.有想法的朋友给小弟支支招吧~~~
打印学生信息:
0 0 0.0
1 2 3 4.0
3 4 5 0.0
// // main.c // 学生成绩管理系统 // // Created by lichan on 13-11-22. // Copyright (c) 2013年 com.lichan. All rights reserved. // #include <stdio.h> #include <stdlib.h> #include <string.h> #define NAMELENGTH 10 typedef struct _student{ int id; char name[NAMELENGTH]; int age; float score; }student; typedef struct _Node { student stu; struct _Node *next; }Node,*NodeLinkList; NodeLinkList head = NULL; //1.录入学生信息 void inputStudent() { printf("\n录入学生信息\n:"); Node *newNode = malloc(sizeof(Node)); newNode->next = NULL; printf("请输入学生信息(格式:班级 姓名 年龄 分数):"); scanf("%d %s %d %f",&newNode->stu.id,newNode->stu.name, &newNode->stu.age,&newNode->stu.score); NodeLinkList p = head; if (head == NULL) { head = malloc(sizeof(Node)); head = newNode; } else { while (p->next) p = p->next; p->next = newNode; } printf("%s 同学信息成绩录入成功.\n",newNode->stu.name); } //2.打印学生信息 void printStudent() { printf("\n打印学生信息:\n"); NodeLinkList p =head; while (p!= NULL) { printf("%d %s %d %3.1f\n",p->stu.id,p->stu.name,p->stu.age,p->stu.score); p = p->next; } } //3.保存学生信息 void saveStudent() { printf("\n存储学生信息到文件:\n"); NodeLinkList p = head; FILE *fp; char lastfilename[20]; char prefileName[50] = "/Users/len/Desktop/"; printf("请输入文件夹名称:"); scanf("%s",lastfilename); char *filename = strcat(prefileName, lastfilename); printf("文件夹路径为: %s\n",filename); if (!(fp = fopen(filename, "a"))) { printf("文件打开失败.\n"); } else { while (p) { fprintf(fp, "%d\t%s\t%d\t%f\n",p->stu.id,p->stu.name,p->stu.age,p->stu.score); p = p->next; } printf("文件保存成功!\n"); } fclose(fp); } //4.读取学生信息 void loadStudent() { printf("\n从文件读取学生信息:\n"); FILE *fp; char lastfilename[20]; printf("请输入所要读取的文件名称:"); scanf("%s",lastfilename); char prefileName[50] = "/Users/len/Desktop/"; char *fimename = strcat(prefileName, lastfilename); head = malloc(sizeof(Node)); NodeLinkList newNode,p =head; if (!(fp =fopen(fimename, "r") ) ) { printf("文件打开失败.\n"); } else { newNode = malloc(sizeof(Node)); while( fscanf(fp, "%d%s%d%f",&newNode->stu.id,newNode->stu.name, &newNode->stu.age,&newNode->stu.score) != EOF) { p->next = newNode; newNode->next = NULL; p = newNode; newNode = malloc(sizeof(Node)); } printf("文件加载成功!\n"); // head = p->next; } fclose(fp); } //5.统计学生信息 void countStudent() { printf("\n统计学生信息:\n"); NodeLinkList p =head; int count = 0; while (p) { p = p->next; count++; } printf("一共有%d 位同学.\n",count); } //6查找学生信息 void findStudent() { printf("\n查找学生信息:\n"); printf("请输入索要查询同学的学号:"); int sid ; scanf("%d",&sid); NodeLinkList p = head; while (p) { if (p->stu.id == sid) { break; } p = p->next; } printf("索要查询的学号为%d 的同学信息为:\n",sid); printf("%d %s %d %3.1f\n",p->stu.id,p->stu.name,p->stu.age,p->stu.score); } //7修改某个学生的信息 void modifyStudent() { printf("\n修改学生信息:\n"); printf("请输入索要修改的同学的学号:"); int sid ; scanf("%d",&sid); NodeLinkList p = head; while (p) { if (p->stu.id == sid) { break; } p = p->next; } printf("请输入学号为%d 的学生信息(格式:班级 姓名 年龄 分数):",sid); scanf("%d %s %d %f",&p->stu.id,p->stu.name, &p->stu.age,&p->stu.score); } int main(int argc, const char * argv[]) { printf("欢迎使用学生成绩管理系统(version1.0):\n\n"); while (1) { printf("请进行功能选择:\n"); printf("1 录入 2打印\n"); printf("3 保存 4读取\n"); printf("5 统计 6查找\n"); printf("7 修改 8~退出\n"); int ch ; scanf("%d",&ch); getchar(); switch (ch) { case 1: inputStudent(); break; case 2: printStudent(); break; case 3: saveStudent(); break; case 4: loadStudent(); break; case 5: countStudent(); break; case 6: findStudent(); break; case 7: modifyStudent(); break; case 8: return 0; default: return 0; } } // insert code here... printf("Hello, World!\n"); return 0; }
————————————————
版权声明:本文为CSDN博主「Ministarler」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/ministarler/article/details/
免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://yundeesoft.com/60341.html