这是一个学生信息管理系统的项目

功能

1.browse——浏览

将文件中的内容打印到终端上

2.search——搜索

学号搜索(输入想要搜索的学号,出现对应学号的学生的全部信息)

姓名搜索

3.insert——插入

插入一个同学的信息,输入一个同学的信息即可

4.delete——删除

输入需要被删除的同学的学号,删除相应同学的信息

5.create——创建

创建(初始化)一系列同学的信息(以链表形式)

6.revise——修改

输入需要被修改的同学的学号,然后选择需要被修改的信息

0.exit——退出

退出此系统

执行结果

终端会打印执行结果

文件的内容会显示执行结果

思路

总体思路:首先读取文件中的内容,将其转化为程序系统内的链表;接着,在程序系统内对链表进行相应修改;最后,在结束程序系统时,将链表内容打印到文件中(此时文件内容就包括其原本内容和你进行修改过的内容

代码

详细代码如下:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define L sizeof(struct student)
FILE *fp;
struct birthday
{int year;int month;int day;
};
struct student
{long num;char name[12];char sex[2];struct birthday date;float score;struct student *next;
};
struct student*del(struct student*head,long n)
{struct student*p1,*p2;if(head==NULL) {printf("A Wrong Operation\n");return NULL;}p1=head;while(n>p1->num&&p1->next!=NULL){p2=p1;p1=p1->next;}if(n<p1->num||n>p1->num) printf("Not found");else if(p1==head) head=head->next;else if(p1->next==NULL) p2->next=NULL;else p2->next=p1->next;return head;
}
struct student*insert(struct student*head,struct student*p)
{struct student*p1,*p2=NULL; p1=head;while(p1!=NULL&&p->num>p1->num&&p1->next!=NULL){p2=p1;p1=p1->next;}if(head==NULL) {head=p; }else if(p1==head&&p1->next!=NULL) {p->next=p1;head=p;}else if(p1->next==NULL&&p->num>p1->num&&p2==NULL) {p1->next=p;p->next=NULL;}else if(p1->next==NULL&&p->num<p1->num&&p2==NULL){p->next=p1;head=p;}else if(p2!=NULL&&p->num>p1->num){   p1->next=p;p->next=NULL;}else if(p2!=NULL&&p1->num>p->num){p2->next=p;p->next=p1;}return head;
}
struct student*create()
{printf("Please enter student's information(学号=0 for exit)\n");printf("\n");int i=2;struct student*p,*p1,*p2;p=(struct student*)malloc(L);printf("\n");printf("请输入第1位同学的信息:\n");printf("学号:");scanf("%d",&p->num);if(p->num==0){printf("finish\n");return NULL;} getchar();printf("姓名:"); gets(p->name);printf("性别(男/女):");gets(p->sex);printf("出生日期(xxxx.xx.xx):");scanf("%d.%d.%d",&p->date.year,&p->date.month,&p->date.day);p->next=NULL;if(p->date.year>2100||p->date.year<1900||p->date.month>12||p->date.month<1||p->date.day>31||p->date.day<1) {printf("输入有误(出生年份在1900--2100间)\n");return NULL;}printf("成绩:");scanf("%f",&p->score);if(p->score>100||p->score<0){printf("输入超出范围(0--100)\n");return NULL;}while(1){p1=(struct student*)malloc(L);printf("\n");printf("请输入第%d位同学的信息:\n",i);printf("学号:");scanf("%d",&p1->num);if(p1->num==0){printf("finish\n");break;}getchar();printf("姓名:"); gets(p1->name);printf("性别(男/女):");gets(p1->sex);printf("出生日期(xxxx.xx.xx):");scanf("%d.%d.%d",&p1->date.year,&p1->date.month,&p1->date.day);if(p1->date.year>2100||p1->date.year<1900||p1->date.month>12||p1->date.month<1||p1->date.day>31||p1->date.day<1) {printf("输入有误(出生年份在1900--2100间)");return p;}printf("成绩:");scanf("%f",&p1->score); if(p->score>100||p->score<0){printf("输入超出范围(0--100)\n");return NULL;}p1->next=NULL;i++;p=insert(p,p1);}free(p1);return p;
}
void print(struct student*p)
{struct student *t;if(p==NULL) printf("Maybe there's nothing here\n");t=p;while(t!=NULL){printf("%d\t%s\t%s\t%d.%d.%d\t %.2f\n",t->num,t->name,t->sex,t->date.year,t->date.month,t->date.day,t->score);t=t->next;}}
struct student* browse(struct student *head)
{int test=1;struct student *t,*t1,*t2;t=head;if(t==NULL){t=(struct student*)malloc(L);if(fscanf(fp,"%d\t%s\t%s%d.%d.%d%f",&t->num,t->name,&t->sex,&t->date.year,&t->date.month,&t->date.day,&t->score)<0) {free(t);return NULL;}t->next=NULL;t1=(struct student*)malloc(L);while(fscanf(fp,"%d\t%s\t%s%d.%d.%d%f",&t1->num,t1->name,&t1->sex,&t1->date.year,&t1->date.month,&t1->date.day,&t1->score)>0){t1->next=NULL;t=insert(t,t1);t1=(struct student*)malloc(L);}free(t1);head=t;}else{t2=(struct student*)malloc(L);if(fscanf(fp,"%d\t%s\t%s%d.%d.%d%f",&t2->num,t2->name,&t2->sex,&t2->date.year,&t2->date.month,&t2->date.day,&t2->score)<0) {free(t2);return NULL;}t2->next=NULL;t1=(struct student*)malloc(L);while(fscanf(fp,"%d\t%s\t%s%d.%d.%d%f",&t1->num,t1->name,&t1->sex,&t1->date.year,&t1->date.month,&t1->date.day,&t1->score)>0){t1->next=NULL;t2=insert(t2,t1);t1=(struct student*)malloc(L);}free(t1);head=t2;}return head;
}
int main()
{int a,n,m,c,c1,d;long b;char name_revise[12];struct student *p,*head,*t;head=NULL;printf("\t\t    ********Welcome to the system********\n");fp=fopen("学生信息.dat","a");if(fp==NULL){fp=fopen("学生信息.dat","w");}printf("1.browse    2.search    3.insert    4.delete    5.create    6.revise    0.exit\n");scanf("%d",&a);while(a){if(a==1){fp=fopen("学生信息.dat","r");rewind(fp);printf("\n");head=browse(head);print(head);t=head;fp=fopen("学生信息.dat","w");while(t!=NULL){fprintf(fp,"%d\t%s\t%s\t%d.%d.%d  %.2f\n",t->num,t->name,t->sex,t->date.year,t->date.month,t->date.day,t->score);t=t->next;   }fclose(fp);fp=fopen("学生信息.dat","a");}if(a==2){fp=fopen("学生信息.dat","r");rewind(fp);printf("\n");head=browse(head);t=head;printf("1.按学号查询\t2.按姓名查询\n");scanf("%d",&m);if(m==1){printf("请输入学号:");scanf("%d",&b);while(t!=NULL&&t->num!=b) t=t->next;if(t!=NULL) printf("%d\t%s\t%s\t%d.%d.%d\t %.2f\n",t->num,t->name,t->sex,t->date.year,t->date.month,t->date.day,t->score);else printf("Not Found\n");}if(m==2){char name_search[12];printf("请输入姓名:");scanf("%s",name_search);while(t!=NULL&&strcmp(name_search,t->name)!=0) t=t->next;if(t!=NULL) printf("%d\t%s\t%s\t%d.%d.%d\t %.2f\n",t->num,t->name,t->sex,t->date.year,t->date.month,t->date.day,t->score);else printf("Not Found\n");}fp=fopen("学生信息.dat","a");}if(a==3){p=(struct student*)malloc(L);printf("\n");printf("请输入同学的信息:\n");printf("学号:");scanf("%d",&p->num);if(p->num==0){printf("finish\n");continue;} getchar();printf("姓名:"); gets(p->name);printf("性别(男/女):");gets(p->sex);printf("出生日期(xxxx.xx.xx):");scanf("%d.%d.%d",&p->date.year,&p->date.month,&p->date.day);p->next=NULL;if(p->date.year>2100||p->date.year<1900||p->date.month>12||p->date.month<1||p->date.day>31||p->date.day<1) {printf("输入有误(出生年份在1900--2100间)");continue;}printf("成绩:");scanf("%f",&p->score);if(p->score>100||p->score<0){printf("输入超出范围(0--100)\n");continue ;}fp=fopen("学生信息.dat","r");rewind(fp);printf("\n");head=browse(head);head=insert(head,p);t=head;fp=fopen("学生信息.dat","w");while(t!=NULL){fprintf(fp,"%d\t%s\t%s\t%d.%d.%d  %.2f\n",t->num,t->name,t->sex,t->date.year,t->date.month,t->date.day,t->score);t=t->next;   }fclose(fp);fp=fopen("学生信息.dat","a");}if(a==4){printf("请输入需被删除学生的学号\n"); scanf("%d",&n);fp=fopen("学生信息.dat","r");rewind(fp);printf("\n");head=browse(head);head=del(head,n);t=head;fp=fopen("学生信息.dat","w");while(t!=NULL){fprintf(fp,"%d\t%s\t%s\t%d.%d.%d  %.2f\n",t->num,t->name,t->sex,t->date.year,t->date.month,t->date.day,t->score);t=t->next;    }fclose(fp);fp=fopen("学生信息.dat","a");}if(a==5){printf("\n");head=create();t=head;while(t!=NULL){fprintf(fp,"%d\t%s\t%s\t%d.%d.%d  %.2f\n",t->num,t->name,t->sex,t->date.year,t->date.month,t->date.day,t->score);t=t->next;}fclose(fp);fp=fopen("学生信息.dat","a");}if(a==6){fp=fopen("学生信息.dat","r");rewind(fp);printf("\n");head=browse(head);t=head;printf("输入需被修改的学生的学号:");scanf("%d",&c);while(t!=NULL&&t->num!=c) t=t->next;if(t!=NULL) printf("%d\t%s\t%s\t%d.%d.%d\t %.2f\n",t->num,t->name,t->sex,t->date.year,t->date.month,t->date.day,t->score);else{printf("Not Found\n");continue;} printf("1.学号  2.姓名  3.性别  4.生日  5.成绩\n");scanf("%d",&c1);if(c1==1){printf("请输入新的学号:");scanf("%d",&d);t->num=d;printf("%d\t%s\t%s\t%d.%d.%d\t %.2f\n",t->num,t->name,t->sex,t->date.year,t->date.month,t->date.day,t->score);t=head;head=browse(head);fp=fopen("学生信息.dat","w");while(t!=NULL){fprintf(fp,"%d\t%s\t%s\t%d.%d.%d  %.2f\n",t->num,t->name,t->sex,t->date.year,t->date.month,t->date.day,t->score);t=t->next;   }fclose(fp);}if(c1==2){printf("请输入新的姓名:");scanf("%s",name_revise);strcpy(t->name,name_revise);printf("%d\t%s\t%s\t%d.%d.%d\t %.2f\n",t->num,t->name,t->sex,t->date.year,t->date.month,t->date.day,t->score);t=head;fp=fopen("学生信息.dat","w");while(t!=NULL){fprintf(fp,"%d\t%s\t%s\t%d.%d.%d  %.2f\n",t->num,t->name,t->sex,t->date.year,t->date.month,t->date.day,t->score);t=t->next;    }fclose(fp);}if(c1==3){char sex_revise[2];printf("请输入新的性别:");scanf("%s",&sex_revise);strcpy(t->sex,sex_revise);printf("%d\t%s\t%s\t%d.%d.%d\t %.2f\n",t->num,t->name,t->sex,t->date.year,t->date.month,t->date.day,t->score);fp=fopen("学生信息.dat","w");while(t!=NULL){fprintf(fp,"%d\t%s\t%s\t%d.%d.%d  %.2f\n",t->num,t->name,t->sex,t->date.year,t->date.month,t->date.day,t->score);t=t->next;   }fclose(fp);}if(c1==4){struct birthday revise;printf("请输入新的生日:");scanf("%d.%d.%d",&revise.year,&revise.month,&revise.day);if(revise.year>2100||revise.year<1900||revise.month>12||revise.month<1||revise.day>31||revise.day<1) {printf("输入有误(出生年份在1900--2100间)");continue;}t->date.year=revise.year;t->date.month=revise.month;t->date.day=revise.day;printf("%d\t%s\t%s\t%d.%d.%d\t %.2f\n",t->num,t->name,t->sex,t->date.year,t->date.month,t->date.day,t->score);fp=fopen("学生信息.dat","w");while(t!=NULL){fprintf(fp,"%d\t%s\t%s\t%d.%d.%d  %.2f\n",t->num,t->name,t->sex,t->date.year,t->date.month,t->date.day,t->score);t=t->next; }fclose(fp);}if(c1==5){float score_revise;printf("请输入新的成绩:");scanf("%f",&score_revise);if(score_revise>100||score_revise<0){printf("输入超出范围(0--100)\n");continue;}t->score=score_revise;printf("%d\t%s\t%s\t%d.%d.%d\t %.2f\n",t->num,t->name,t->sex,t->date.year,t->date.month,t->date.day,t->score);fp=fopen("学生信息.dat","w");while(t!=NULL){fprintf(fp,"%d\t%s\t%s\t%d.%d.%d  %.2f\n",t->num,t->name,t->sex,t->date.year,t->date.month,t->date.day,t->score);t=t->next;  }fclose(fp);}fp=fopen("学生信息.dat","a");}printf("1.browse    2.search    3.insert    4.delete    5.create    6.revise    0.exit\n");scanf("%d",&a);}fclose(fp);
} 

其实我的代码有一些冗余,读者根据自己理解简化即可

c语言·学生信息管理系统{功能丰富}相关推荐

  1. c语言学生信息系统 完整版,C语言 学生信息管理系统(完整版).docx

    C语言 学生信息管理系统(完整版) 电子科技大学成都学院 程序综合设计论文 论文题目 学生信息管理系统 学生姓名 魏国 学 号 1340840625 专 业 机械设计制造及其自动化 系(分院) 电子工 ...

  2. 显示学生信息的C语言,学生信息管理系统C语言.doc

    学生信息管理系统C语言 学生信息管理系统 摘要 由于学校规模进一步扩大,学生人数逐年上升,学生信息的管理也变得越来越复杂,切实有效的把学生信息管理系统引入学校教务管理中,对于促进学校管理制度和提高学校 ...

  3. 大一c语言学生信息管理系统课程设计

    使用命令行操作, 每次操作结束后,代码中加入清屏命令,给人一种有界面的感觉. 大一学c语言,现在回过头来看, 觉得当时什么图形界面啥的都没学, 怎么写课程设计. 结果我还是当时班上写得最棒的黑框框毕业 ...

  4. C语言学生信息管理系统(结构体数组,文件)

    C语言学生信息管理系统(结构体数组,文件) 这是初学时写的一个程序,比较菜,不喜勿喷.在一个结构体里定义结构体内所有的信息(如果信息也需要分类则可以再定义一个结构体并在当前结构体内声明,我的这个代码在 ...

  5. c语言学生信息结构体录入文件,C语言—学生信息管理系统

    学习了C语言结构体,链表和文件的知识之后,就可以做出一个学生信息管理系统了,下面的是我在刚学习完这块知识后写出来的,基本没什么界面,不过 能够实现  录入,添加,插入,遍历,删除,查询,并且保存到本地 ...

  6. C语言学生信息管理系统第二版(附带密码登录模式)

    这几天准备复习一下学习的C语言,进行一门语言最好的复习方式我认为就是用这门语言做一个作品出来,这样可能方方面面的知识都有可能用到,于是我花了几天写了一个学生信息管理系统,这是第二版操作系统,我又增加了 ...

  7. C语言学生成绩管理系统文档版,C语言学生信息管理系统(完整版)总结.docx

    电子科技大学成都学院 程序综合设计论文 论文题目 学生信息管理系统 学生姓名 魏国 学 号 1340840625 专 业 机械设计制造及其自动化 系(分院) 电子工程系 授课教师 杜娥 2015年12 ...

  8. C语言系统讲解,C语言学生信息管理系统讲解.doc

    C语言课程设计报告 学生姓名:田俊 学生学号:0909090610 所在班级: 电气信息0906 课程设计题目: 学生信息管理系统 课程设计目标和要求: 巩固和加强<C语言程序设计>课程的 ...

  9. 学生管理程序c语言数组,c语言学生管理系统(c语言学生信息管理系统)

    要求:1记录学生班级姓名,性别,职务住址情况,数据输入数据删除排序查. #include /*引用库函数*/ #include #include #include typedef struct /*定 ...

最新文章

  1. Shell---for循环
  2. 英国加密期货交易所增加比特币现金合约
  3. Intel Realsense D435 python (Python Wrapper)example00: NumPy Integration 将深度帧数据转换为 Numpy 数组进行处理
  4. 【289】◀▶ Python I/O 读写文本文件
  5. Vue3、TypeScript 实现图片数量及大小随宽度自适应调整
  6. mysql 行级锁 索引_mysql 行级锁 索引唯一值
  7. 125_Power BI 中 DAX 的性能测试
  8. 夺命雷公狗---DEDECMS----14dedecms首页导航条的完成
  9. c语言代码re通常什么错误,求帮助 C语言realloc和free触发断点的问题
  10. Spring源码之创建AOP代理(补)
  11. 60、在Visual Studio 2019 环境下,使用C#调用C++生成的dll实现yolov5的图片检测
  12. opencv-python:17_图像经典边缘检测算子(边缘检测、图像梯度、Roberts算子、Prewitt算子、Sobel 算子、Laplacian 算子、Canny算子、算子优缺点对比)
  13. 冒泡排序java实现
  14. Manjaro Linux 魔兽世界 使用黑盒工坊安装插件
  15. Php7.5,phpwind7.5灵活的业务支持体系
  16. 集团申请选择企业邮箱注意事项
  17. 利用腾讯漏洞,QQ群日拉万人精准流量的方法
  18. 定时且周期性的任务研究II--ScheduledThreadPoolExecutor
  19. MATLAB在线编辑网站及使用教程
  20. 年终回顾(二):物流机器人篇

热门文章

  1. cisco认证考试信息网站
  2. 微信小程序蓝牙模块遇到的坑
  3. Python3 判断参数是否全为Ture, all() 函数详解
  4. 拥抱浪潮 -- 吴军的《浪潮之巅》读后感
  5. 关于GPS(全球定位系统)的前世今生及发展前景
  6. 分布式认知在计算机应用系统,心理学什么叫分布式认知
  7. 共享我当时学会计原理时做的思维导图
  8. 腾讯云副总裁黄俊洪:对于开发者,云原生意味着什么
  9. 档案馆 虚拟服务器,基于VMware数字档案馆服务器虚拟化探究.doc
  10. Levenberg–Marquardt算法