300字范文,内容丰富有趣,生活中的好帮手!
300字范文 > c语言学生信息结构体录入文件 C语言—学生信息管理系统

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

时间:2021-08-07 20:32:48

相关推荐

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;

}

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。