C语言实现学生籍贯信息记录簿
本文实例为大家分享了C语言实现学生籍贯信息记录簿的具体代码,供大家参考,具体内容如下
一、任务概述(文章仅供参考)
进一步掌握和利用C语言进行课程设计的能力;
进一步理解和运用结构化程序设计的思想和方法;
初步掌握开发一个小型实用系统的基本方法;
二、设计功能
1.创建信息链表并以磁盘文件保存;
2.读取磁盘文件并显示输出所有学生的籍贯信息;
3.按学号或姓名查询其籍贯;
4.按籍贯查询并输出该籍贯的所有学生;
5.能添加、删除和修改学生的籍贯信息
三、功能展示
四、思维导图
五、程序源码
#include "dos.h"
#include "stdio.h"
#include "stdlib.h"
#include "coNIO.h"
#include "math.h"
#include "string.h"
struct hj
{ long number;
char name[10],address[50];
struct hj *next;
};
FILE *fp;
void openfile(char xx[20])
{
fp=fopen(xx,"ab+");
if(fp==NULL)
fp=fopen(xx,"wb");
}
void hjnew(void)
{
system("cls");
int n=0;
long xnumber;
char xname[10];
char xaddress[50];
struct hj *head;
struct hj *x1,*x2;
head=NULL;
x2=NULL;
printf("\n ★★★★★欢迎使用户籍管理系统★★★★★\n");
printf("\n ★★★录入信息★★★\n");
printf("\n 〓提示输入0返回上级菜单〓\n\n\n");
printf("\n 请输入学号【15字内】:");
scanf("%ld",&xnumber);
if(xnumber==0)
Goto haha;
printf("\n 请输入姓名【10字内】:");
scanf("%s",xname);
printf("\n 请输入籍贯【25字内】:");
scanf("%s",xaddress);
while(xnumber!=0)
{
n++;
x1=(struct hj *)malloc(sizeof(struct hj));
x1->number=xnumber;
strcpy(x1->name,xname);
strcpy(x1->address,xaddress);
if(n==1)
head=x1;
else
x2->next=x1;
x2=x1;
printf("\n 请输入学号【15字内】:");
scanf("%ld",&xnumber);
if(xnumber==0)
break;
printf("\n 请输入姓名【10字内】:");
scanf("%s",xname);
printf("\n 请输入籍贯【25字内】:");
scanf("%s",xaddress);
}
x2->next=NULL;
x1=head;
while(x1!=NULL)
{
openfile("hj.txt");
char d[5]="山西";
fwrite(x1,sizeof(struct hj),1,fp);
fclose(fp);
if(strstr(x1->address,d)!=NULL)
{
openfile("schj.txt");
fwrite(x1,sizeof(struct hj),1,fp);
fclose(fp);
}
else
{
openfile("Qthj.txt");
fwrite(x1,sizeof(struct hj),1,fp);
fclose(fp);
}
x1=x1->next;
}
haha:;
}
void hjxmselect(void) //按学号方式查询函数
{
SSMmx:
int n=0;
long hh;
system("cls");
printf("\n ★★★★★欢迎使用户籍管理系统★★★★★\n");
printf("\n ★★★查询编辑信息★★★\n");
printf("\n 〓提示输入0返回上级菜单〓\n\n\n");
printf(" 请您输入学号:");
scanf("%ld",&hh);
if(hh!=0)
{
struct hj *p;
struct hj *q=NULL,*head=NULL;
fp=fopen("hj.txt","rb");
if(fp==NULL)
{
printf("\n没有记录,请输入记录然后再查询!");
getch();
goto jjx;
}
while(!feof(fp))
{
n++;
p=(struct hj *)malloc(sizeof(struct hj));
fread(p,sizeof(struct hj),1,fp);
if(n==1)
head=p;
else
q->next=p;
q=p;
}
q->next=NULL;
p=head;
while(p!=NULL)
{
if(p->number==hh)
{
int a;
printf("\n 结 果 → 学号=%ld 姓名=%s",p->number,p->name);
printf("\n 地址=%s",p->address);
printf("\n\n 操 作 → ⑴更改数据 ⑵删除数据 ⑶查询其他数据 ⑷返回上页 ⑸退出程序\n\n 请您选择操作:");
ssmx:
scanf("%d",&a);
switch(a)
{
void hjedit(struct hj *headd,struct hj *pp);
void hjdelete(struct hj *heaDDD,struct hj *ss);
case 1: hjedit(head,p);
goto ssmmx;break;
case 2: hjdelete(head,p);
goto ssmmx;break;
case 3: goto ssmmx;
case 4: goto jjx;
case 5:exit(0);
default:printf("\n 错误的选择,请重新选择:");
goto ssmx;
}
}
else
p=p->next;
}
int iiii=0;
printf("\n 没有此记录 1.重新查询 2.返回上一页 3.退出程序!");
printf("\n 请选择:");
qqqq:
scanf("%d",&iiii);
switch(iiii)
{
case 1: goto ssmmx;
case 2: goto jjx;
case 3: exit(0);
default: printf("\n 错误的选择,请重新选择:");
goto qqqq;
}
goto jjx;
}
jjx:;
}
void hjxhselect(void)//按姓名方式查询函数
{
ssmm:
int n=0;
char hh[10];
system("cls");
printf("\n ★★★★★欢迎使用户籍管理系统★★★★★\n");
printf("\n ★★★查询编辑信息★★★\n");
printf("\n 〓提示输入0返回上级菜单〓\n\n\n");
printf(" 请您输入姓名:");
scanf("%s",hh);
if(strcmp(hh,"0")!=0)
{
struct hj *p;
struct hj *q=NULL,*head=NULL;
fp=fopen("hj.txt","rb");
if(fp==NULL)
{
printf("\n没有记录,请输入记录然后再查询!");
getch();
goto jjj;
}
while(!feof(fp))
{
n++;
p=(struct hj *)malloc(sizeof(struct hj));
fread(p,sizeof(struct hj),1,fp);
if(n==1)
head=p;
else
q->next=p;
q=p;
}
q->next=NULL;
p=head;
while(p!=NULL)
{
if(strcmp(p->name,hh)==0)
{
int a;
printf("\n 结 果 → 学号=%ld 姓名=%s ",p->number,p->name);
printf("\n 地址=%s",p->address);
printf("\n\n 操 作 → ⑴更改数据 ⑵删除数据 ⑶查询其他数据 ⑷返回上页 ⑸退出程序\n\n 请您选择操作:");
ssm:
scanf("%d",&a);
switch(a)
{
void hjedit(struct hj *headd,struct hj *pp);
void hjdelete(struct hj *headdd,struct hj *ss);
case 1: hjedit(head,p);
goto ssmm;break;
case 2: hjdelete(head,p);
goto ssmm;break;
case 3: goto ssmm;
case 4: goto jjj;
case 5:exit(0);
default:printf("\n 错误的选择,请重新选择:");
goto ssm;
}
}
else
p=p->next;
}
int iii=0;
printf("\n 没有此记录 1.重新查询 2.返回上一页 3.退出程序!");
printf("\n 请选择:");
qqq:
scanf("%d",&iii);
switch(iii)
{
case 1: goto ssmm;
case 2: goto jjj;
case 3: exit(0);
default: printf("\n 错误的选择,请重新选择:");
goto qqq;
}
goto jjj;
}
jjj: ;
}
void hjjgselect(void)//按籍贯方式查询
{
yyy:
int i;
system("cls");
printf("\n ★★★★★欢迎使用户籍管理系统★★★★★\n");
printf("\n ★★★籍贯方式查询信息★★★\n\n\n");
printf("\n 一 显示所有信息\n");
printf("\n 二 显示山西籍所有信息\n");
printf("\n 三 显示其它籍所有信息\n");
printf("\n 四 自定义查询信息\n");
printf("\n 五 ←返回上级菜单\n");
printf("\n 六 ↓退出程序\n");
printf("\n\n 请选择:");
scanf("%d",&i);
switch(i)
{ void zdyselect(void);
void allselect(char a[8]);
case 1:allselect("hj.txt");
goto yyy;break;
case 2: allselect("schj.txt");
goto yyy;break;
case 3: allselect("qthj.txt");
goto yyy;break;
case 4: zdyselect();
case 5: break;
case 6: exit(0);
}
}
void zdyselect(void)
{
ssmmz:
int n=0,j=0;
char hh[10];
system("cls");
printf("\n ★★★★★欢迎使用户籍管理系统★★★★★\n");
printf("\n ★★★自定义查询信息★★★\n\n\n");
printf(" 请您输入地址关键字:");
scanf("%s",hh);
if(strcmp(hh,"0")!=0)
{
struct hj *p;
struct hj *q=NULL,*head=NULL;
fp=fopen("hj.txt","rb");
if(fp==NULL)
{
printf("\n 没有记录,请输入记录然后再查询!");
getch();
goto jjz;
}
while(!feof(fp))
{
n++;
p=(struct hj *)malloc(sizeof(struct hj));
fread(p,sizeof(struct hj),1,fp);
if(n==1)
head=p;
else
q->next=p;
q=p;
}
q->next=NULL;
p=head;
while(p!=NULL)
{
if(strstr(p->address,hh)!=NULL)
{
int a;
j++;
printf("\n 结 果 → 学号=%ld 姓名=%s ",p->number,p->name);
printf("\n 地址=%s",p->address);
printf("\n\n 操 作 → ⑴更改数据 ⑵删除数据 ⑶查询下一条数据 ⑷返回上页 ⑸退出程序\n\n 请您选择操作:");
ssmz:
scanf("%d",&a);
switch(a)
{
void hjedit(struct hj *headd,struct hj *pp);
void hjdelete(struct hj *headdd,struct hj *ss);
case 1: hjedit(head,p);
goto ssmmz;break;
case 2: hjdelete(head,p);
goto ssmmz;break;
case 3: p=p->next;continue;
case 4: goto jjz;
case 5:exit(0);
default:printf("\n 错误的选择,请重新选择:");
goto ssmz;
}
p=p->next;
}
else
p=p->next;
}
if(j==0)
{
printf("\n\n\n没有匹配的记录 按任意键继续!");
getch();
fclose(fp);
goto ssmmz;
}
else
{ int xx;
printf("\n\n查询完毕! ⑴ 继续查询 ⑵ 返回上一级菜单 ⑶ 退出程序");
printf("\n请选择:");
scanf("%d",&xx);
if(xx==2)
goto jjz;
else if(xx==3)
exit(0);
}
goto ssmmz;
jjz: ;
}
}
void allselect(char a[8])//全部查询
{
int n=0;
int k=0;
system("cls");
printf("\n ★★★★★欢迎使用户籍管理系统★★★★★\n");
printf("\n ★★★籍贯方式信息★★★\n\n\n");
struct hj *p;
struct hj *q=NULL,*head=NULL;
fp=fopen(a,"rb");
if(fp==NULL)
{
printf("\n对不起,没有记录无法查询!");
goto xxxx;
}
rewind(fp);
while(!feof(fp))
{
n++;
p=(struct hj *)malloc(sizeof(struct hj));
fread(p,sizeof(struct hj),1,fp);
if(n==1)
head=p;
else
q->next=p;
q=p;
}
q->next=NULL;
struct hj *h1,*p2,*q3,*r4,*s5;
h1=p2=(hj *)malloc(sizeof(struct hj));
p2->next=head;
while(p2->next!=NULL)
{
q3=p2->next;
r4=p2;
while(q3->next!=NULL)
{
if(q3->next->number<p2->next->number)
r4=q3;
q3=q3->next;
}
if(r4!=p2)
{
s5=r4->next;
r4->next=s5->next;
s5->next=p2->next;
p2->next=s5;
}
p2=p2->next;
}
head=h1->next->next;
free(h1);
p=head;
while(p!=NULL&&n>0)
{
n--;
printf("\n学号=%ld 姓名=%s",p->number,p->name);
printf("\n地址=%s",p->address);
p=p->next;
}
xxxx:
printf("\n→显示完毕←\n⑴ ↑返回上级菜单 ⑵ ↓退出程序 \n请 选 择 :");
xxx:
scanf("%d",&n);
switch(n)
{
case 1:break;
case 2:exit(0);
default:printf("\n错误的选择,请重新选择:");
goto xxx;
}
}
void hjselect(void)//查询编辑信息函数
{
cxbegin:
int a;
system("cls");
printf("\n ★★★★★欢迎使用户籍管理系统★★★★★\n");
printf("\n ★★★查询编辑信息★★★\n\n\n");
printf("\n 一 按学号方式查询\n");
printf("\n 二 按姓名方式查询\n");
printf("\n 三 按籍贯方式查询\n");
printf("\n 四 →显示全部信息\n");
printf("\n 五 ←返回上级菜单\n");
printf("\n 请 选 择 查 询 方 式:");
cxmm:
scanf("%d",&a);
switch(a)
{
case 1: hjxmselect();goto cxbegin;break;
case 2: hjxhselect();goto cxbegin;break;
case 3: hjjgselect();goto cxbegin;break;
case 4: allselect("hj.txt");goto cxbegin;break;
case 5: break;
default:printf("\n错误的选择,请重新选择:");
goto cxmm;
}
}
void hjde(void)//删除界面函数
{
cxxbegin:
int a;
system("cls");
printf("\n ★★★★★欢迎使用户籍管理系统★★★★★\n");
printf("\n ★★★删除信息★★★\n\n\n");
printf("\n 一 按学号方式删除\n");
printf("\n 二 按姓名方式删除\n");
printf("\n 三 按籍贯方式删除\n");
printf("\n 四 →删除全部信息\n");
printf("\n 五 ←返回上级菜单\n");
printf("\n 请 选 择 删 除 方 式:");
cxxmm:
scanf("%d",&a);
int i=0;
switch(a)
{
case 1: hjxmselect();goto cxxbegin;break;
case 2: hjxhselect();goto cxxbegin;break;
case 3: zdyselect();goto cxxbegin;break;
case 4:
fp=fopen("hj.txt","wb");
if(fp!=NULL)
i++;
fp=fopen("schj.txt","wb");
if(fp!=NULL)
i++;
fp=fopen("qthj.txt","wb");
if(fp!=NULL)
i++;
if(i==3)
{
printf("\n 全部数据已经删除!!!!!!敲任意键继续");
getch();
}
goto cxxbegin;break;
case 5: break;
default:printf("\n错误的选择,请重新选择:");
goto cxxmm;
}
}
//==============删除函数接口===============
void hjdelete(struct hj *headdd,struct hj *ss)
{
struct hj *q;
char d[5]="山西";
if(headdd==ss)
{
headdd=headdd->next;
goto gogo;
}
q=headdd;
while(q!=NULL)
{
if(q->next->number==ss->number)
{
break;
}
q=q->next;
}
q->next=ss->next;
gogo:
q=headdd;
fp=fopen("hj.txt","wb");
while(q!=NULL)
{
fwrite(q,sizeof(struct hj),1,fp);
q=q->next;
}
fclose(fp);
q=headdd;
fp=fopen("schj.txt","wb");
while(q!=NULL)
{
if(strstr(q->address,d)!=NULL)
{
fwrite(q,sizeof(struct hj),1,fp);
}
q=q->next;
}
fclose(fp);
q=headdd;
fp=fopen("qthj.txt","wb");
while(q!=NULL)
{
if(strstr(q->address,d)==NULL)
{
fwrite(q,sizeof(struct hj),1,fp);
}
q=q->next;
}
fclose(fp);
}
//===============编辑函数接口==============
void hjedit(struct hj *headd,struct hj *pp)
{
int n=0;
struct hj *p,*p1,*p2;
char d[5]="江苏";
printf("\n 输 入 → 学号=");
scanf("%ld",&pp->number);
printf("\n 姓名=");
scanf("%s",pp->name);
printf("\n 地址=");
scanf("%s",pp->address);
p=headd;
fp=fopen("hj.txt","wb");
while(p!=NULL)
{
fwrite(p,sizeof(struct hj),1,fp);
p=p->next;
}
fclose(fp);
p1=headd;
fp=fopen("schj.txt","wb");
while(p1!=NULL)
{
if(strstr(p1->address,d)!=NULL)
{
fwrite(p1,sizeof(struct hj),1,fp);
}
p1=p1->next;
}
fclose(fp);
p2=headd;
fp=fopen("qthj.txt","wb");
while(p2!=NULL)
{
if(strstr(p2->address,d)==NULL)
{
fwrite(p2,sizeof(struct hj),1,fp);
}
p2=p2->next;
}
fclose(fp);
}
int main(int arGC, char* argv[])
{
begin:
int t;
system("cls");
printf("\n ★★★★★欢迎使用户籍管理系统★★★★★\n\n\n\n\n");
printf(" 一 录入学生籍贯信息\n\n");
printf(" 二 查编学生籍贯信息\n\n");
printf(" 三 删除学生籍贯信息\n\n");
printf(" 四 退出程序\n\n");
printf(" 请您选择:");
mm:
scanf("%d",&t);
switch(t)
{
case 1: hjnew();break;
case 2: hjselect();break;
case 3: hjde();break;
case 4:exit(0);
default:printf("\n 错误的选择,请重新选择:");
goto mm;
}
goto begin;
return 0;
}
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。
相关文章