- 点击跳转=>《导航贴》- Unity手册,系统实战学习
- 点击跳转=>《导航贴》- Android手册,重温移动开发
👉关于作者
众所周知,人生是一个漫长的流程,不断克服困难,不断反思前进的过程。在这个过程中会产生很多对于人生的质疑和思考,于是我决定将自己的思考,经验和故事全部分享出来,以此寻找共鸣 !!!
专注于Android/Unity和各种游戏开发技巧,以及各种资源分享(网站、工具、素材、源码、游戏等)
有什么需要欢迎私我,交流群让学习不再孤单。
👉实践过程
😜问题
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;
}
👉其他
📢作者:小空和小芝中的小空
📢转载说明-务必注明来源:https://zhima.blog.csdn.net/
📢这位道友请留步☁️,我观你气度不凡,谈吐间隐隐有王者霸气💚,日后定有一番大作为📝!!!旁边有点赞👍收藏🌟今日传你,点了吧,未来你成功☀️,我分文不取,若不成功⚡️,也好回来找我。
温馨提示:点击下方卡片获取更多意想不到的资源。