c语言学生信息结构体录入文件,C语言—学生信息管理系统
学习了C语言结构体,链表和文件的知识之后,就可以做出一个学生信息管理系统了,下面的是我在刚学习完这块知识后写出来的,基本没什么界面,不过 能够实现 录入,添加,插入,遍历,删除,查询,并且保存到本地文件的功能。
首先,链表中每个学生节点的信息包括这些:姓名,学号,班内序号,手机号。所以定义这样的结构体类型:
struct student{
char iname[20];
int inumber;
char snum[10];
char iPhone[20];
struct student *next;
};
因为C语言是模块化的语言,所以把要实现的每个功能都做成一个函数,在主函数的选择语句中调用:
这些函数有:1.初始录入或添加学生信息函数:
struct student *Creat();
返回值为链表的头节点地址,功能是 录入学生信息并保存到D:\\stuifo.txt文件下。
2.插入学生信息函数:
void Insert();
功能:读出文件内的信息到链表,再将信息插入到其中,再保存到本地。
3.遍历文件中的学生信息
void print();
功能:读出文件内的信息到链表,再将其依次输出。
4.删除学生信息
void Delete();
功能:将指定的班内序号的学生从文件中删除。
5.查询学生信息
void seek();
功能:查询指定的班内序号的学生的信息,并显示。
以上就是学生信息管理系统的大致功能,但实现以上函数功能的过程中还需要调用几个更基本的函数:
int now1_student();
struct student *read();
void save(struct student *pHead);
它们的功能分别是:返回文件内学生数目;读文件内信息到链表;保存链表中信息到文件内。
具体代码如下:
#include#include#include#include#includestruct student{
char iname[20];
int inumber;
char snum[10];
char iPhone[20];
struct student *next;
};
int now1_student(){ //显示文件中现在已录入的学生数
int i=1;
char j[100000];
FILE *info;
info=fopen("d:\\stuifo.txt","rt");
rewind(info);
while(fgets(j,sizeof(struct student),info)!=NULL)
{
fseek(info,sizeof(struct student)*i,0);
i++;
}
fclose(info);
return i-1;
}
int icount=now1_student();
struct student *read(){ //读入文件内的信息,并返回链表头指针的地址
struct student *pHead,*pEnd,*pNew;
FILE *fp; //创建链表,并将文件内数据读入链表
fp=fopen("d:\\stuifo.txt","rt");
if(fp==NULL){
printf("未在本地找到学生信息文件!\n");
return NULL;
}
int i=1,count=0;
while(i<=now1_student()){
count++;
pNew=(struct student *)malloc(sizeof(struct student));
fread(pNew,sizeof(struct student),1,fp);
if(count==1){
pNew->next=pHead;
pEnd=pNew;
pHead=pNew;
}
else{
pNew->next=NULL;
pEnd->next=pNew;
pEnd=pNew;
}
i++;
}
fclose(fp);
return pHead;
}
void save(struct student *pHead){ //保存当前的链表至本地文件
struct student *pTemp=pHead;
FILE *fp;
fp=fopen("d:\\stuifo.txt","wt");
while(pTemp!=NULL){
fwrite(pTemp,sizeof(struct student),1,fp);
pTemp=pTemp->next;
}
printf("成功将信息保存至本地文件!");
fclose(fp);
}
int _ifblank(char judge[]){ //判断字符串是否只有空格,若只有空格则返回0,否则返回字符串中非空格字符数目
char ch;
char true_[20];
int i,j;
for(i=0,j=0;i0){
pHead=read();
pTemp=pHead;
while(pTemp->next!=NULL)
pTemp=pTemp->next;
pNew=(struct student *)malloc(sizeof(struct student));
printf("添加学生信息:\n");
printf("姓名:");
gets(pNew->iname);
gets(pNew->iname);
printf("学号:");
scanf("%s",pNew->snum);
printf("班内序号:");
scanf("%d",&pNew->inumber);
printf("手机号:");
scanf("%s",pNew->iPhone);
pNew->next=NULL;
pTemp->next=pNew;
save(pHead);
printf("添加成功!\n");
return pHead;
}
pEnd=pNew=(struct student *)malloc(sizeof(struct student));
printf("请输入学生信息:");
printf("\n姓名:");
scanf("%s",pNew->iname);
printf("学号:");
scanf("%s",pNew->snum);
printf("班内序号:");
scanf("%d",&pNew->inumber);
printf("手机号:");
scanf("%s",pNew->iPhone);
while(1){
count++;
if(count==1){
pNew->next=pHead;
pEnd=pNew;
pHead=pNew;
}
else{
pNew->next=NULL;
pEnd->next=pNew;
pEnd=pNew;
}
pNew=(struct student *)malloc(sizeof(struct student));
printf("继续录入,姓名为空时停止\n");
printf("姓名:");
gets(pNew->iname);
gets(pNew->iname);
if(!_ifblank(pNew->iname))
break;
printf("学号:");
scanf("%s",pNew->snum);
printf("班内序号:");
scanf("%d",&pNew->inumber);
printf("手机号:");
scanf("%s",pNew->iPhone);
}
free(pNew);
pTemp=pHead;
printf("是否保存这些学生信息? 1-是 0-否");
scanf("%d",&judge);
if(judge==1){
save(pHead);
}
return pHead;
}
void print(){ //打印出本地文件内的学生信息
int count=0;
struct student *pHead=NULL;
struct student *pTemp,*pEnd,*pNew;
pHead=read();
struct student *temp;
int index=1;
temp=pHead;
while(temp!=NULL){
printf("第%d个学生:\n",index);
printf("姓名:%s\n",temp->iname);
printf("学号:%s\n",temp->snum);
printf("班内序号:%d\n",temp->inumber);
printf("手机号:%s\n\n",temp->iPhone);
temp=temp->next;
index++;
}
}
void Insert(){
int index;
struct student *pHead;
struct student *ipnew,*p,*pPre,*pTemp;
struct student *pNew,*pEnd;
pHead=read();
printf("请输入要插入的学生班内序号:"); //将学生信息插入进链表
scanf("%d",&index);
printf("\t\t\t\t\t\t-----------当前已录入%d人---------\n",now1_student());
if(index>now1_student())
printf("输入错误!\n");
printf("请输入学生的信息:\n");
ipnew=(struct student *)malloc(sizeof(struct student));
printf("姓名:");
scanf("%s",ipnew->iname);
printf("学号:");
scanf("%s",ipnew->snum);
printf("班内序号:");
scanf("%d",&ipnew->inumber);
printf("手机号:");
scanf("%s",ipnew->iPhone);
if(index==1){
ipnew->next=pHead;
pHead=ipnew;
}
else{
p=pHead;
for(int i=1;inext;
ipnew->next=p->next;
p->next=ipnew;
}
save(pHead);
return;
}
void Delete(){ //删除学生信息
struct student *pHead;
int i,index;
struct student *pTemp;
struct student *pPre,*p;
pHead=read();
pTemp=pHead;
pPre=pTemp;
printf("请输入要删除的学生班内序号:");
scanf("%d",&index);
if(index>now1_student()){
printf("输入有误!\n");
return;
}
if(index==1){
pHead=pHead->next;
save(pHead);
printf("学生信息删除成功!\n");
return;
}
while(pTemp->inumber!=index){ //无法删除头节点
pPre=pTemp;
pTemp=pTemp->next;
}
pPre->next=pTemp->next;
free(pTemp);
save(pHead);
printf("学生信息删除成功!\n");
}
void seek(){ //根据班内序号查找学生信息
struct student *pHead;
struct student *pTemp;
int inum;
printf("请输入要查找学生的班内序号:");
scanf("%d",&inum);
pHead=read();
pTemp=pHead;
while(pTemp->inumber!=inum){
pTemp=pTemp->next;
if(pTemp==NULL){
printf("未查找到此学生信息!\n");
getch();
return;
}
}
printf("姓名:%s\n",pTemp->iname);
printf("学号:%s\n",pTemp->snum);
printf("班内序号:%d\n",pTemp->inumber);
printf("手机号:%s",pTemp->iPhone);
}
int main(){
int choice=-1;
struct student *pHead;
while(choice!=0){
//system("cls");
printf("\n\t\t\t\t\t\t-------学生信息管理系统------\n");
if(now1_student()==0){
printf("\t\t\t\t\t\t------目前还未录入过信息------\n");
printf("\t\t\t\t\t\t---------请开始首次录入-------\n");
}
else{
printf("\t\t\t\t\t\t-----------已录入%d人---------\n",now1_student());
printf("\t\t\t\t\t\t--若需新增学生信息请选则添加--\n");
}
printf("\t\t\t\t\t\t-----------------------------\n");
printf("\t\t\t\t\t\t || 1. 录入学生信息 ||\n");
printf("\t\t\t\t\t\t || 2. 插入学生信息 ||\n");
printf("\t\t\t\t\t\t || 3. 删除学生信息 ||\n");
printf("\t\t\t\t\t\t || 4. 打印学生信息表 ||\n");
printf("\t\t\t\t\t\t || 5. 查找学生信息 ||\n");
printf("\t\t\t\t\t\t || 0. 退出 ||\n");
printf("\t\t\t\t\t\t----------------------------\n");
scanf("%d",&choice);
switch(choice){
case 1:
if(now1_student()!=0)
printf("您已录入过初始信息,请继续添加学生信息!\n");
pHead=Creat();
getch();
break;
case 2:Insert();
getch();
break;
case 3:Delete();
getch();
break;
case 4:print();
getch();
break;
case 5:seek();
getch();
break;
case 0:
break;
default:
break;
}
}
return 0;
}
c语言学生信息结构体录入文件,C语言—学生信息管理系统相关推荐
- c语言中将结构体写入文件,C语言中将结构体写入文件
可以使用fwrite()将一个结构体写入文件: fwrite(&some_struct,sizeof somestruct,1,fp); 对应的fread函数可以再把它读出来,此处fwrite ...
- 定义一个学生信息结构体,包含姓名,学号,语文成绩、数学成绩,和英语成绩,定义结构体数组存放不同学生的信息,可以在终端录入学生的信息,在基础上添加一个计算平均值和按照平均值排序以及删除指定学号的学生信息
1. 代码如下: 头文件 chx.h #include<stdio.h> #include<string.h>struct chx{char name[128];int sn ...
- C++ 定义学生信息结构体,按照学号顺序排序
定义学生信息结构体,录入学生信息,根据学生的学号顺序进行排序. struct student 定义学生信息,学生信息中Score sc 为一个结构体类型的变量,存放学生的成绩信息: input(),d ...
- 11月14号作业:定义一个学生信息结构体
定义一个学生信息结构体,包含姓名学号,语数英成绩: 定义结构体数组存放不同学生的信息,可以在终端录入学生的信息,可以实现对学生成绩的排序 排序可以语文数学英语任选一个排序. 运行代码 #include ...
- 在学生信息结构体中再添加一个计算平均值和按照平均值排序以及删除指定学号的学生信息
定义一个学生信息结构体,包含姓名,学号,语文成绩.数学成绩,和英语成绩,定义结构体数组存放不同学生的信息,可以在终端录入学生的信息,可以实现对于学生成绩的排序,排序可以按照语文.数学或者英语的任意一个 ...
- java结构体构建学生 学号_易错题: 程序通过定义学生结构体变量,存储了学生的学号、姓名和3门课的成绩。...
根据网考网考试中心的统计分析,以下试题在2015-12-7日计算机二级考试C语言习题练习中,答错率较高,为:93% [填空题] 程序通过定义学生结构体变量,存储了学生的学号.姓名和3门课的成绩.所有学 ...
- 定义一个学生信息结构体,包含姓名,学号,语文成绩、数学成绩,和英语成绩,定义结构体数组存放不同学生的信息,可以在终端录入学生的信息,可以实现对于学生成绩的排序,排序可以按照语文、数学或者英语的任意一个
1.代码实现 #include<stdio.h> #include<stdlib.h> #include<string.h>typedef struct stude ...
- c语言中结构体头文件是什么,函数形参里有结构体指针,为什么在头文件生
满意答案 lam950 2017.04.08 采纳率:59% 等级:8 已帮助:913人 C语言用结构体指针作函数参数 这种方式比用结构体变量作函数参数效率高,因为无需传递各个成员的值,只需传递 ...
- 学生信息结构体数组拷贝和排序(结构体,结构体数组,结构体指针)
主函数使用下面结构体定义和函数,从控制台输入n(n<=40)各学生信息,按平均成绩降序后输出所有女生信息. 1.定义一个学生结构体,信息包括学号(字符串,长度小于20).姓名(字符串,长度小于2 ...
最新文章
- java 挂钩子_挂钩组件
- R语言临床预测模型的评价指标与验证指标实战:综合判别改善指数IDI(Integrated Discrimination Improvement, IDI)
- 免费超高速卡片式病人基本信息列表控件
- C++ 与 JAVA的不同点
- ubuntu php png,[工作记事]Ubuntu下PHP编译安装以及添加jepg支持
- 推荐:数据竞赛的利器XGBoost的常见面试题
- 中富之命能有多少钱_做建筑师到底能赚多少钱?
- 状态机fsm_Verilog专题(三十二)101 Sequence Recognition Mealy FSM(101序列识别状态机)...
- IO多路复用(select,poll,epoll)详解
- azure db 设置时区_关于Azure Cosmos DB(以前称为DocumentDB)的8件事
- 如何利用 Android 自定义控件实现炫酷的动画?|CSDN 博文精选
- 黑客为什么不攻击支付宝?
- MacBook外接“键盘鼠标”设置经验
- 深入理解设计模式-设计模式七大原则
- Linux下几种定时器的使用
- 苹果审核团队_如何才能跟 App Store 审核团队有效沟通?
- 网页设计——美食博客
- 小明的成绩从去年的72分提升到了今年的85分,请计算小明成绩提升的百分点
- 【电子邮件提醒】用python写个能发邮件的脚本
- Java反编译工具JAD的安装与简单使用
热门文章
- one 主格 复数 宾格_英语主格宾格形容词性物主代词及名词性物主代词练习题.doc...
- Windows 10 中的存储空间
- 2023年五面蚂蚁、三面拼多多、字节跳动最终拿offer入职拼多多
- ★大塚 愛【LOVE IS BORN】~3rd Anniversary 2006~のライブDVD★
- fatal: unable to connect to gitee.com: gitee.com[0: 180.97.125.228]: errno=Unknown error
- R 语言读写数据编码格式
- 5G CPE 5G CPE功能优势
- 2020/2/23如何高效使用Axure绘制原型图
- code flattening —— conversion to R1CS——formulation of QAP
- 像FIFA一样踢球的AI,比打游戏更强吗?