基本原理:
利用链表和文件读写实现具有永久存储数据的系统
文件命名:StudentSystem.cpp
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include<windows.h>
struct students
{
int id;
char name[60];
char address[60];
};
struct node
{
struct students data;
struct node *next;
};
struct node *create_students();
void print_students(struct node *h);
void sort_students(struct node *h);
void modify_students(struct node *h);
void delete_students(struct node *h);
void menu();
main(){
struct node *h=NULL;
system("mode con cols=100 lines=30");
int x,i=1;
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_BLUE|FOREGROUND_INTENSITY);
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_GREEN|FOREGROUND_RED|FOREGROUND_INTENSITY);
do{
menu();
printf(" 请输入您的选择:");
scanf("%d",&x);
switch (x)
{
case 1:h=create_students();break;
case 2:print_students(h);break;
case 3:sort_students(h);break;
case 4:modify_students(h);break;
case 5:delete_students(h);break;
case 6:printf("欢迎下次访问,再见!!!\n");exit(0);break;
}
}while(x!=5);
return 0;
}
void menu(){
printf("\n\n\n **************************************学生学籍信息管理系统************************************** \n\n");
printf(" * * \n\n");
printf(" * * \n\n");
printf(" * 1--- 学生学籍信息录入 --- * \n\n");
printf(" * 2--- 查看学生信息 --- * \n\n");
printf(" * 3--- 学生学籍排序 --- * \n\n");
printf(" * 4--- 修改学生信息 --- * \n\n");
printf(" * 5--- 删除学生信息 --- * \n\n");
printf(" * 6--- 退出系统 --- * \n\n\n\n");
printf(" ************************************************************************************************ \n\n\n\n");
}
struct node *create_students()
{
FILE *fp;
int x,m=1;
char nam[60],a[60];
struct node *h,*p,*q,*n;
system("cls");
printf("\n\n\n\n\n\n\n\n\n\n\n\n");
printf(" 请输入第%d位学生id(输入-1结束):",m);
scanf("%d",&x);
getchar();
if(x!=-1)
{
printf(" 姓名:");
gets(nam);
printf(" 地址:");
gets(a);
}
if(x!=-1)
{
h=(struct node*)malloc(sizeof(struct node));
h->data.id=x;
strcpy(h->data.name,nam);
strcpy(h->data.address,a);
h->next=NULL;
p=h;
n=p;
}
while(x!=-1)
{
m++;
printf(" 请输入第%d位学生id(输入-1结束):",m);
scanf("%d",&x);
getchar();
if(x!=-1)
{
printf(" 姓名:");
gets(nam);
printf(" 地址:");
gets(a);
}
if(x!=-1)
{
q=(struct node*)malloc(sizeof(struct node));
q->data.id=x;
strcpy(q->data.name,nam);
strcpy(q->data.address,a);
q->next=NULL;
p->next=q;
p=p->next;
}
}
fp=fopen("book.txt","a");
if(fp==NULL)
{
printf("文件打开失败\n");
exit(1);
}
while(n!=NULL)
{
fprintf(fp,"%-20d %-20s %-20s\n",n->data.id,n->data.name,n->data.address);
n=n->next;
}
fclose(fp);
return h;
}
void print_students(struct node *h)
{
h=(struct node*)malloc(sizeof(struct node));
FILE *fp;
struct node *p,*q,*r;
system("cls");
p=h;
int id,i=1,j=1,ok;
char name_stu[60],address_stu[60];
fp=fopen("book.txt","r");
if(fp==NULL)
{
printf("文件打开失败");
}else{
printf("文件打开成功\n");
while(fscanf(fp," %d %s %s",&id,name_stu,address_stu)!=EOF)
{
q=(struct node*)malloc(sizeof(struct node));
strcpy(q->data.name,name_stu);
strcpy(q->data.address,address_stu);
q->data.id=id;
q->next=NULL;
p->next=q;
p=p->next;
}
}
fclose(fp);
r=h;
r=r->next;
printf("序号 学号 姓名 地址\n");
while(r!=NULL){
printf("%d:",j);
j++;
printf(" %d %s %s\n",r->data.id,r->data.name,r->data.address);
r=r->next;
}
printf("输入1查看结束:");
scanf("%d",&ok);
if(ok==1)
{
system("cls");
menu();
}
}
void sort_students(struct node *h)
{
system("cls");
h=(struct node*)malloc(sizeof(struct node));
FILE *fp;
struct node *p,*q,*r,*n;
p=h;
int id,i=0,sort,j,k,x;
char name_stu[60],address_stu[60],s_name[60],s_address[60];
fp=fopen("book.txt","r");
if(fp==NULL)
{
printf("文件打开失败");
}else{
while(fscanf(fp," %d %s %s",&id,name_stu,address_stu)!=EOF)
{
i++;
q=(struct node*)malloc(sizeof(struct node));
strcpy(q->data.name,name_stu);
strcpy(q->data.address,address_stu);
q->data.id=id;
q->next=NULL;
p->next=q;
p=p->next;
}
}
fclose(fp);
r=h;
r=r->next;
n=r;
q=r->next;
printf("%d",r->data.id);
printf("%d",q->data.id);
while(true)
{
printf("\n\n\n\n\n\n\n\n\n\n\n\n");
printf(" 从小到大排序请按1,从大到小排序请按0:");
scanf("%d",&sort);
if(sort==0 || sort==1){
break;
}else{
printf("您的输入有误");
}
}
if(sort==1){
for(j=0;j<i-1;j++)
{
for(k=j+1;k<i;k++)
{
if((r->data.id)>(q->data.id))
{
x=r->data.id;
strcpy(s_name,r->data.name);
strcpy(s_address,r->data.address);
r->data.id=q->data.id;
strcpy(r->data.name,q->data.name);
strcpy(r->data.address,q->data.address);
q->data.id=x;
strcpy(q->data.name,s_name);
strcpy(q->data.address,s_address);
}
q=q->next;
}
r=r->next;
q=r->next;
}
printf("排序成功\n");
}
if(sort==0){
printf("-----从大到小排序-----\n");
for(j=0;j<i-1;j++)
{
for(k=j+1;k<i;k++)
{
if((r->data.id)<(q->data.id))
{
x=r->data.id;
strcpy(s_name,r->data.name);
strcpy(s_address,r->data.address);
r->data.id=q->data.id;
strcpy(r->data.name,q->data.name);
strcpy(r->data.address,q->data.address);
q->data.id=x;
strcpy(q->data.name,s_name);
strcpy(q->data.address,s_address);
}
q=q->next;
}
r=r->next;
q=r->next;
}
printf("排序成功\n");
}
fp=fopen("book.txt","w");
if(fp==NULL)
{
printf("文件打开失败\n");
exit(1);
}
while(n!=NULL)
{
fprintf(fp,"%-20d %-20s %-20s\n",n->data.id,n->data.name,n->data.address);
n=n->next;
}
fclose(fp);
}
void modify_students(struct node *h)
{
system("cls");
int searchId,x,NewId;
char NewName[60],NewAddress[60];
int id;
char name_stu[60],address_stu[60],s_name[60],s_address[60];
h=(struct node*)malloc(sizeof(struct node));
FILE *fp;
struct node *p,*q,*r,*n;
p=h;
r=p;
n=p;
fp=fopen("book.txt","r");
if(fp==NULL)
{
printf("文件打开失败");
}else{
while(fscanf(fp," %d %s %s",&id,name_stu,address_stu)!=EOF)
{
q=(struct node*)malloc(sizeof(struct node));
strcpy(q->data.name,name_stu);
strcpy(q->data.address,address_stu);
q->data.id=id;
q->next=NULL;
p->next=q;
p=p->next;
}
}
fclose(fp);
printf("\n\n\n\n\n\n\n\n\n\n\n\n");
printf(" 请输入您所要修改学生的ID:");
scanf("%d",&searchId);
printf("您将选择ID为%d的学生!!!\n",searchId);
r=r->next;
while(r!=NULL)
{
if(searchId==r->data.id){
NewId=r->data.id;
strcpy(NewName,r->data.name);
strcpy(NewAddress,r->data.address);
printf(">>>>>>>>>>>>%s\n",r->data.name);
printf(">>>>>>>>>>>>%s\n",r->data.address);
while(true)
{
printf(" 请输入您要改的项目(1:学号、2:姓名、3:地址、-1:确认修改):");
scanf("%d",&x);
getchar();
if(x==1){
printf(" 请输入新学号:");
scanf("%d",&NewId);
getchar();
printf("\n+++++++++%d\n",NewId);
}
if(x==2){
printf(" 请输入新姓名:");
gets(NewName);
printf("\n+++++++++%s\n",NewName);
}
if(x==3){
printf("请输入新地址:");
gets(NewAddress);
printf("\n+++++++++%s\n",NewAddress);
}
if(x==-1){
break;
}
}
r->data.id=NewId;
strcpy(r->data.name,NewName);
strcpy(r->data.address,NewAddress);
printf("修改成功!!!\n新学号为:%d 新姓名为:%s 新地址为:%s\n",r->data.id,r->data.name,r->data.address);
break;
}
r=r->next;
}
n=n->next;
fp=fopen("book.txt","w");
if(fp==NULL)
{
printf("文件打开失败\n");
exit(1);
}
while(n!=NULL)
{
fprintf(fp,"%-20d %-20s %-20s\n",n->data.id,n->data.name,n->data.address);
n=n->next;
}
fclose(fp);
}
void delete_students(struct node *h)
{
system("cls");
int searchId;
int id;
char name_stu[60],address_stu[60],s_name[60],s_address[60];
h=(struct node*)malloc(sizeof(struct node));
FILE *fp;
struct node *p,*q,*r,*m,*n,*k;
p=h;
r=p;
m=p;
n=r;
fp=fopen("book.txt","r");
if(fp==NULL)
{
printf("文件打开失败");
}else{
while(fscanf(fp," %d %s %s",&id,name_stu,address_stu)!=EOF)
{
q=(struct node*)malloc(sizeof(struct node));
strcpy(q->data.name,name_stu);
strcpy(q->data.address,address_stu);
q->data.id=id;
q->next=NULL;
p->next=q;
p=p->next;
}
}
fclose(fp);
printf("\n\n\n\n\n\n\n\n\n\n\n\n");
printf(" 请输入您所要删除学生的学生号");
scanf("%d",&searchId);
getchar();
while(r->next!=NULL)
{
k=r;
r=r->next;
if(searchId==r->data.id)
{
k->next=r->next;
free(r);
r=k->next;
break;
}
}
printf(" 删除成功\n");
n=n->next;
fp=fopen("book.txt","w");
if(fp==NULL)
{
printf("文件打开失败\n");
exit(1);
}
while(n!=NULL)
{
fprintf(fp,"%-20d %-20s %-20s\n",n->data.id,n->data.name,n->data.address);
n=n->next;
}
fclose(fp);
main();
}
<p>基本原理:<br />
利用链表和文件读写实现具有永久存储数据的系统</p>
<p>文件命名:StudentSystem.cpp</p>
<pre><div class="hljs"><code class="lang-c"><span class="hljs-meta">#<span class="hljs-keyword">include</span><span class="hljs-string"><stdio.h></span></span>
<span class="hljs-meta">#<span class="hljs-keyword">include</span><span class="hljs-string"><string.h></span></span>
<span class="hljs-meta">#<span class="hljs-keyword">include</span><span class="hljs-string"><stdlib.h></span></span>
<span class="hljs-meta">#<span class="hljs-keyword">include</span><span class="hljs-string"><windows.h></span> </span>
<span class="hljs-comment">//创建结构体</span>
<span class="hljs-class"><span class="hljs-keyword">struct</span> <span class="hljs-title">students</span>
{</span>
<span class="hljs-type">int</span> id;
<span class="hljs-type">char</span> name[<span class="hljs-number">60</span>];
<span class="hljs-type">char</span> address[<span class="hljs-number">60</span>];
};
<span class="hljs-comment">//创建链表</span>
<span class="hljs-class"><span class="hljs-keyword">struct</span> <span class="hljs-title">node</span>
{</span>
<span class="hljs-class"><span class="hljs-keyword">struct</span> <span class="hljs-title">students</span> <span class="hljs-title">data</span>;</span>
<span class="hljs-class"><span class="hljs-keyword">struct</span> <span class="hljs-title">node</span> *<span class="hljs-title">next</span>;</span>
};
<span class="hljs-keyword">struct</span> node *<span class="hljs-title function_">create_students</span><span class="hljs-params">()</span>;
<span class="hljs-type">void</span> <span class="hljs-title function_">print_students</span><span class="hljs-params">(<span class="hljs-keyword">struct</span> node *h)</span>;
<span class="hljs-type">void</span> <span class="hljs-title function_">sort_students</span><span class="hljs-params">(<span class="hljs-keyword">struct</span> node *h)</span>;
<span class="hljs-type">void</span> <span class="hljs-title function_">modify_students</span><span class="hljs-params">(<span class="hljs-keyword">struct</span> node *h)</span>;
<span class="hljs-type">void</span> <span class="hljs-title function_">delete_students</span><span class="hljs-params">(<span class="hljs-keyword">struct</span> node *h)</span>;
<span class="hljs-type">void</span> <span class="hljs-title function_">menu</span><span class="hljs-params">()</span>;
main(){
<span class="hljs-class"><span class="hljs-keyword">struct</span> <span class="hljs-title">node</span> *<span class="hljs-title">h</span>=</span><span class="hljs-literal">NULL</span>;
system(<span class="hljs-string">"mode con cols=100 lines=30"</span>);
<span class="hljs-type">int</span> x,i=<span class="hljs-number">1</span>;
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_BLUE|FOREGROUND_INTENSITY);
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_GREEN|FOREGROUND_RED|FOREGROUND_INTENSITY);
<span class="hljs-keyword">do</span>{
menu();
<span class="hljs-built_in">printf</span>(<span class="hljs-string">" 请输入您的选择:"</span>);
<span class="hljs-built_in">scanf</span>(<span class="hljs-string">"%d"</span>,&x);
<span class="hljs-keyword">switch</span> (x)
{
<span class="hljs-keyword">case</span> <span class="hljs-number">1</span>:h=create_students();<span class="hljs-keyword">break</span>;
<span class="hljs-keyword">case</span> <span class="hljs-number">2</span>:print_students(h);<span class="hljs-keyword">break</span>;
<span class="hljs-keyword">case</span> <span class="hljs-number">3</span>:sort_students(h);<span class="hljs-keyword">break</span>;
<span class="hljs-keyword">case</span> <span class="hljs-number">4</span>:modify_students(h);<span class="hljs-keyword">break</span>;
<span class="hljs-keyword">case</span> <span class="hljs-number">5</span>:delete_students(h);<span class="hljs-keyword">break</span>;
<span class="hljs-keyword">case</span> <span class="hljs-number">6</span>:<span class="hljs-built_in">printf</span>(<span class="hljs-string">"欢迎下次访问,再见!!!\n"</span>);<span class="hljs-built_in">exit</span>(<span class="hljs-number">0</span>);<span class="hljs-keyword">break</span>;
}
}<span class="hljs-keyword">while</span>(x!=<span class="hljs-number">5</span>);
<span class="hljs-keyword">return</span> <span class="hljs-number">0</span>;
}
<span class="hljs-comment">//菜单</span>
<span class="hljs-type">void</span> <span class="hljs-title function_">menu</span><span class="hljs-params">()</span>{
<span class="hljs-built_in">printf</span>(<span class="hljs-string">"\n\n\n **************************************学生学籍信息管理系统************************************** \n\n"</span>);
<span class="hljs-built_in">printf</span>(<span class="hljs-string">" * * \n\n"</span>);
<span class="hljs-built_in">printf</span>(<span class="hljs-string">" * * \n\n"</span>);
<span class="hljs-built_in">printf</span>(<span class="hljs-string">" * 1--- 学生学籍信息录入 --- * \n\n"</span>);
<span class="hljs-built_in">printf</span>(<span class="hljs-string">" * 2--- 查看学生信息 --- * \n\n"</span>);
<span class="hljs-built_in">printf</span>(<span class="hljs-string">" * 3--- 学生学籍排序 --- * \n\n"</span>);
<span class="hljs-built_in">printf</span>(<span class="hljs-string">" * 4--- 修改学生信息 --- * \n\n"</span>);
<span class="hljs-built_in">printf</span>(<span class="hljs-string">" * 5--- 删除学生信息 --- * \n\n"</span>);
<span class="hljs-built_in">printf</span>(<span class="hljs-string">" * 6--- 退出系统 --- * \n\n\n\n"</span>);
<span class="hljs-built_in">printf</span>(<span class="hljs-string">" ************************************************************************************************ \n\n\n\n"</span>);
}
<span class="hljs-comment">//一、输入学生学籍信息</span>
<span class="hljs-keyword">struct</span> node *<span class="hljs-title function_">create_students</span><span class="hljs-params">()</span>
{
FILE *fp;
<span class="hljs-type">int</span> x,m=<span class="hljs-number">1</span>;
<span class="hljs-type">char</span> nam[<span class="hljs-number">60</span>],a[<span class="hljs-number">60</span>];
<span class="hljs-class"><span class="hljs-keyword">struct</span> <span class="hljs-title">node</span> *<span class="hljs-title">h</span>,*<span class="hljs-title">p</span>,*<span class="hljs-title">q</span>,*<span class="hljs-title">n</span>;</span>
system(<span class="hljs-string">"cls"</span>);
<span class="hljs-built_in">printf</span>(<span class="hljs-string">"\n\n\n\n\n\n\n\n\n\n\n\n"</span>);
<span class="hljs-built_in">printf</span>(<span class="hljs-string">" 请输入第%d位学生id(输入-1结束):"</span>,m);
<span class="hljs-built_in">scanf</span>(<span class="hljs-string">"%d"</span>,&x);
getchar();
<span class="hljs-keyword">if</span>(x!=<span class="hljs-number">-1</span>)
{
<span class="hljs-built_in">printf</span>(<span class="hljs-string">" 姓名:"</span>);
gets(nam);
<span class="hljs-built_in">printf</span>(<span class="hljs-string">" 地址:"</span>);
gets(a);
}
<span class="hljs-keyword">if</span>(x!=<span class="hljs-number">-1</span>)
{
h=(<span class="hljs-keyword">struct</span> node*)<span class="hljs-built_in">malloc</span>(<span class="hljs-keyword">sizeof</span>(<span class="hljs-keyword">struct</span> node));
h->data.id=x;
<span class="hljs-built_in">strcpy</span>(h->data.name,nam);
<span class="hljs-built_in">strcpy</span>(h->data.address,a);
h->next=<span class="hljs-literal">NULL</span>;
p=h;
n=p;
}
<span class="hljs-keyword">while</span>(x!=<span class="hljs-number">-1</span>)
{
m++;
<span class="hljs-built_in">printf</span>(<span class="hljs-string">" 请输入第%d位学生id(输入-1结束):"</span>,m);
<span class="hljs-built_in">scanf</span>(<span class="hljs-string">"%d"</span>,&x);
getchar();
<span class="hljs-keyword">if</span>(x!=<span class="hljs-number">-1</span>)
{
<span class="hljs-built_in">printf</span>(<span class="hljs-string">" 姓名:"</span>);
gets(nam);
<span class="hljs-built_in">printf</span>(<span class="hljs-string">" 地址:"</span>);
gets(a);
}
<span class="hljs-keyword">if</span>(x!=<span class="hljs-number">-1</span>)
{
q=(<span class="hljs-keyword">struct</span> node*)<span class="hljs-built_in">malloc</span>(<span class="hljs-keyword">sizeof</span>(<span class="hljs-keyword">struct</span> node));
q->data.id=x;
<span class="hljs-built_in">strcpy</span>(q->data.name,nam);
<span class="hljs-built_in">strcpy</span>(q->data.address,a);
q->next=<span class="hljs-literal">NULL</span>;
p->next=q;
p=p->next;
}
}
<span class="hljs-comment">//printf("========打印r链表=========\n");</span>
<span class="hljs-comment">//printf("测试%d\n",n->data.id);</span>
<span class="hljs-comment">//while(n!=NULL){</span>
<span class="hljs-comment">// printf("%d %s %s\n",n->data.id,n->data.name,n->data.address);</span>
<span class="hljs-comment">// n=n->next;</span>
<span class="hljs-comment">//}</span>
<span class="hljs-comment">//printf("========打印r链表结束=========\n");</span>
<span class="hljs-comment">//存档</span>
<span class="hljs-comment">//n=n->next;</span>
fp=fopen(<span class="hljs-string">"book.txt"</span>,<span class="hljs-string">"a"</span>);
<span class="hljs-keyword">if</span>(fp==<span class="hljs-literal">NULL</span>)
{
<span class="hljs-built_in">printf</span>(<span class="hljs-string">"文件打开失败\n"</span>);
<span class="hljs-built_in">exit</span>(<span class="hljs-number">1</span>);
}
<span class="hljs-comment">//fprintf(fp,"\n");</span>
<span class="hljs-keyword">while</span>(n!=<span class="hljs-literal">NULL</span>)
{
<span class="hljs-built_in">fprintf</span>(fp,<span class="hljs-string">"%-20d %-20s %-20s\n"</span>,n->data.id,n->data.name,n->data.address);
n=n->next;
}
fclose(fp);
<span class="hljs-keyword">return</span> h;
}
<span class="hljs-comment">//二、输出所有学生信息</span>
<span class="hljs-type">void</span> <span class="hljs-title function_">print_students</span><span class="hljs-params">(<span class="hljs-keyword">struct</span> node *h)</span>
{
h=(<span class="hljs-keyword">struct</span> node*)<span class="hljs-built_in">malloc</span>(<span class="hljs-keyword">sizeof</span>(<span class="hljs-keyword">struct</span> node));
FILE *fp;
<span class="hljs-class"><span class="hljs-keyword">struct</span> <span class="hljs-title">node</span> *<span class="hljs-title">p</span>,*<span class="hljs-title">q</span>,*<span class="hljs-title">r</span>;</span>
system(<span class="hljs-string">"cls"</span>);
p=h;
<span class="hljs-type">int</span> id,i=<span class="hljs-number">1</span>,j=<span class="hljs-number">1</span>,ok;<span class="hljs-comment">//统计人数 j,k用排序</span>
<span class="hljs-type">char</span> name_stu[<span class="hljs-number">60</span>],address_stu[<span class="hljs-number">60</span>];
fp=fopen(<span class="hljs-string">"book.txt"</span>,<span class="hljs-string">"r"</span>);
<span class="hljs-keyword">if</span>(fp==<span class="hljs-literal">NULL</span>)
{
<span class="hljs-built_in">printf</span>(<span class="hljs-string">"文件打开失败"</span>);
}<span class="hljs-keyword">else</span>{
<span class="hljs-built_in">printf</span>(<span class="hljs-string">"文件打开成功\n"</span>);
<span class="hljs-keyword">while</span>(<span class="hljs-built_in">fscanf</span>(fp,<span class="hljs-string">" %d %s %s"</span>,&id,name_stu,address_stu)!=EOF)
{
<span class="hljs-comment">//printf("\n");</span>
<span class="hljs-comment">//printf("---第%d次循环\n",i);</span>
<span class="hljs-comment">//i++;</span>
q=(<span class="hljs-keyword">struct</span> node*)<span class="hljs-built_in">malloc</span>(<span class="hljs-keyword">sizeof</span>(<span class="hljs-keyword">struct</span> node));
<span class="hljs-comment">//printf("内存申请成功\n");</span>
<span class="hljs-built_in">strcpy</span>(q->data.name,name_stu);
<span class="hljs-comment">//printf("%s ",q->data.name);</span>
<span class="hljs-built_in">strcpy</span>(q->data.address,address_stu);
<span class="hljs-comment">//printf("%s ",q->data.address);</span>
q->data.id=id;
<span class="hljs-comment">//printf("%d\n",q->data.id);</span>
<span class="hljs-comment">//printf("------------------------\n");</span>
q->next=<span class="hljs-literal">NULL</span>;
p->next=q;
p=p->next;
<span class="hljs-comment">//p->next=q;</span>
<span class="hljs-comment">//p=q;</span>
}
}
<span class="hljs-comment">//p->next=NULL;</span>
fclose(fp);
r=h;
r=r->next;
<span class="hljs-built_in">printf</span>(<span class="hljs-string">"序号 学号 姓名 地址\n"</span>);
<span class="hljs-keyword">while</span>(r!=<span class="hljs-literal">NULL</span>){
<span class="hljs-built_in">printf</span>(<span class="hljs-string">"%d:"</span>,j);
j++;
<span class="hljs-built_in">printf</span>(<span class="hljs-string">" %d %s %s\n"</span>,r->data.id,r->data.name,r->data.address);
r=r->next;
}
<span class="hljs-built_in">printf</span>(<span class="hljs-string">"输入1查看结束:"</span>);
<span class="hljs-built_in">scanf</span>(<span class="hljs-string">"%d"</span>,&ok);
<span class="hljs-keyword">if</span>(ok==<span class="hljs-number">1</span>)
{
system(<span class="hljs-string">"cls"</span>);
menu();
}
}
<span class="hljs-comment">//三、排序功能 思路:读取--修改--保存</span>
<span class="hljs-type">void</span> <span class="hljs-title function_">sort_students</span><span class="hljs-params">(<span class="hljs-keyword">struct</span> node *h)</span>
{
system(<span class="hljs-string">"cls"</span>);
<span class="hljs-comment">//1.读取</span>
h=(<span class="hljs-keyword">struct</span> node*)<span class="hljs-built_in">malloc</span>(<span class="hljs-keyword">sizeof</span>(<span class="hljs-keyword">struct</span> node));
FILE *fp;
<span class="hljs-class"><span class="hljs-keyword">struct</span> <span class="hljs-title">node</span> *<span class="hljs-title">p</span>,*<span class="hljs-title">q</span>,*<span class="hljs-title">r</span>,*<span class="hljs-title">n</span>;</span>
p=h;
<span class="hljs-comment">//q=h;</span>
<span class="hljs-type">int</span> id,i=<span class="hljs-number">0</span>,sort,j,k,x;<span class="hljs-comment">//x用于排序暂时存储</span>
<span class="hljs-type">char</span> name_stu[<span class="hljs-number">60</span>],address_stu[<span class="hljs-number">60</span>],s_name[<span class="hljs-number">60</span>],s_address[<span class="hljs-number">60</span>];
fp=fopen(<span class="hljs-string">"book.txt"</span>,<span class="hljs-string">"r"</span>);
<span class="hljs-keyword">if</span>(fp==<span class="hljs-literal">NULL</span>)
{
<span class="hljs-built_in">printf</span>(<span class="hljs-string">"文件打开失败"</span>);
}<span class="hljs-keyword">else</span>{
<span class="hljs-comment">//printf("文件打开成功\n");</span>
<span class="hljs-keyword">while</span>(<span class="hljs-built_in">fscanf</span>(fp,<span class="hljs-string">" %d %s %s"</span>,&id,name_stu,address_stu)!=EOF)
{
<span class="hljs-comment">//printf("\n");</span>
<span class="hljs-comment">//printf("---第%d次循环\n",i);</span>
i++;
q=(<span class="hljs-keyword">struct</span> node*)<span class="hljs-built_in">malloc</span>(<span class="hljs-keyword">sizeof</span>(<span class="hljs-keyword">struct</span> node));
<span class="hljs-comment">//printf("内存申请成功\n");</span>
<span class="hljs-built_in">strcpy</span>(q->data.name,name_stu);
<span class="hljs-comment">//printf("%s ",q->data.name);</span>
<span class="hljs-built_in">strcpy</span>(q->data.address,address_stu);
<span class="hljs-comment">//printf("%s ",q->data.address);</span>
q->data.id=id;
<span class="hljs-comment">//printf("%d\n",q->data.id);</span>
<span class="hljs-comment">//printf("------------------------\n");</span>
q->next=<span class="hljs-literal">NULL</span>;
p->next=q;
p=p->next;
}
}
fclose(fp);
<span class="hljs-comment">//2.修改----->>实现排序</span>
r=h; <span class="hljs-comment">//r为主链表</span>
r=r->next;
n=r;
q=r->next;
<span class="hljs-built_in">printf</span>(<span class="hljs-string">"%d"</span>,r->data.id);
<span class="hljs-built_in">printf</span>(<span class="hljs-string">"%d"</span>,q->data.id);
<span class="hljs-comment">//printf("总长度为:%d\n",i);</span>
<span class="hljs-keyword">while</span>(<span class="hljs-literal">true</span>)
{
<span class="hljs-built_in">printf</span>(<span class="hljs-string">"\n\n\n\n\n\n\n\n\n\n\n\n"</span>);
<span class="hljs-built_in">printf</span>(<span class="hljs-string">" 从小到大排序请按1,从大到小排序请按0:"</span>);
<span class="hljs-built_in">scanf</span>(<span class="hljs-string">"%d"</span>,&sort);
<span class="hljs-keyword">if</span>(sort==<span class="hljs-number">0</span> || sort==<span class="hljs-number">1</span>){
<span class="hljs-keyword">break</span>;
}<span class="hljs-keyword">else</span>{
<span class="hljs-built_in">printf</span>(<span class="hljs-string">"您的输入有误"</span>);
}
}
<span class="hljs-comment">//printf("判断成功\n");</span>
<span class="hljs-comment">//printf("333%d\n",r->data.id);</span>
<span class="hljs-comment">//printf("333%d\n",q->data.id);</span>
<span class="hljs-comment">//从小到大排序</span>
<span class="hljs-keyword">if</span>(sort==<span class="hljs-number">1</span>){
<span class="hljs-comment">//printf("-----从小到大排序-----\n");</span>
<span class="hljs-keyword">for</span>(j=<span class="hljs-number">0</span>;j<i<span class="hljs-number">-1</span>;j++)
<span class="hljs-comment">//while(r!=NULL)</span>
{
<span class="hljs-comment">//printf("=========%d==\n",r->data.id);</span>
<span class="hljs-keyword">for</span>(k=j+<span class="hljs-number">1</span>;k<i;k++)
<span class="hljs-comment">//while(q!=NULL)</span>
{
<span class="hljs-comment">//printf("--%d-\n",q->data.id);</span>
<span class="hljs-keyword">if</span>((r->data.id)>(q->data.id))
{
x=r->data.id;
<span class="hljs-built_in">strcpy</span>(s_name,r->data.name);
<span class="hljs-built_in">strcpy</span>(s_address,r->data.address);
r->data.id=q->data.id;
<span class="hljs-built_in">strcpy</span>(r->data.name,q->data.name);
<span class="hljs-built_in">strcpy</span>(r->data.address,q->data.address);
q->data.id=x;
<span class="hljs-built_in">strcpy</span>(q->data.name,s_name);
<span class="hljs-built_in">strcpy</span>(q->data.address,s_address);
}
q=q->next;
}
r=r->next;
q=r->next;
}
<span class="hljs-built_in">printf</span>(<span class="hljs-string">"排序成功\n"</span>);
}
<span class="hljs-comment">//从大到小排序</span>
<span class="hljs-keyword">if</span>(sort==<span class="hljs-number">0</span>){
<span class="hljs-built_in">printf</span>(<span class="hljs-string">"-----从大到小排序-----\n"</span>);
<span class="hljs-keyword">for</span>(j=<span class="hljs-number">0</span>;j<i<span class="hljs-number">-1</span>;j++)
<span class="hljs-comment">//while(r!=NULL)</span>
{
<span class="hljs-comment">//printf("=========%d==\n",r->data.id);</span>
<span class="hljs-keyword">for</span>(k=j+<span class="hljs-number">1</span>;k<i;k++)
<span class="hljs-comment">//while(q!=NULL)</span>
{
<span class="hljs-comment">//printf("--%d-\n",q->data.id);</span>
<span class="hljs-keyword">if</span>((r->data.id)<(q->data.id))
{
<span class="hljs-comment">//x=r->data.id;</span>
<span class="hljs-comment">//r->data.id=q->data.id;</span>
<span class="hljs-comment">//q->data.id=x;</span>
x=r->data.id;
<span class="hljs-built_in">strcpy</span>(s_name,r->data.name);
<span class="hljs-built_in">strcpy</span>(s_address,r->data.address);
r->data.id=q->data.id;
<span class="hljs-built_in">strcpy</span>(r->data.name,q->data.name);
<span class="hljs-built_in">strcpy</span>(r->data.address,q->data.address);
q->data.id=x;
<span class="hljs-built_in">strcpy</span>(q->data.name,s_name);
<span class="hljs-built_in">strcpy</span>(q->data.address,s_address);
}
q=q->next;
}
r=r->next;
q=r->next;
}
<span class="hljs-built_in">printf</span>(<span class="hljs-string">"排序成功\n"</span>);
}
<span class="hljs-comment">//printf("========打印r链表=========\n");</span>
<span class="hljs-comment">//n=r;</span>
<span class="hljs-comment">//printf("测试%d\n",n->data.id);</span>
<span class="hljs-comment">//while(n!=NULL){</span>
<span class="hljs-comment">// printf("%d %s %s\n",n->data.id,n->data.name,n->data.address);</span>
<span class="hljs-comment">// n=n->next;</span>
<span class="hljs-comment">//}</span>
<span class="hljs-comment">//printf("========打印r链表结束=========\n");</span>
<span class="hljs-comment">//排序存档</span>
<span class="hljs-comment">//FILE *fp;</span>
fp=fopen(<span class="hljs-string">"book.txt"</span>,<span class="hljs-string">"w"</span>);
<span class="hljs-keyword">if</span>(fp==<span class="hljs-literal">NULL</span>)
{
<span class="hljs-built_in">printf</span>(<span class="hljs-string">"文件打开失败\n"</span>);
<span class="hljs-built_in">exit</span>(<span class="hljs-number">1</span>);
}
<span class="hljs-comment">//fprintf(fp,"\n");</span>
<span class="hljs-keyword">while</span>(n!=<span class="hljs-literal">NULL</span>)
{
<span class="hljs-built_in">fprintf</span>(fp,<span class="hljs-string">"%-20d %-20s %-20s\n"</span>,n->data.id,n->data.name,n->data.address);
n=n->next;
}
fclose(fp);
}
<span class="hljs-comment">//四、===========修改学生信息======</span>
<span class="hljs-type">void</span> <span class="hljs-title function_">modify_students</span><span class="hljs-params">(<span class="hljs-keyword">struct</span> node *h)</span>
{
system(<span class="hljs-string">"cls"</span>);
<span class="hljs-comment">//变量</span>
<span class="hljs-type">int</span> searchId,x,NewId;<span class="hljs-comment">// x:选项 searchId:按学号搜 n:新学号 </span>
<span class="hljs-type">char</span> NewName[<span class="hljs-number">60</span>],NewAddress[<span class="hljs-number">60</span>];
<span class="hljs-comment">//1.读取文件,并将内容重新放到结构体p中</span>
<span class="hljs-type">int</span> id;
<span class="hljs-type">char</span> name_stu[<span class="hljs-number">60</span>],address_stu[<span class="hljs-number">60</span>],s_name[<span class="hljs-number">60</span>],s_address[<span class="hljs-number">60</span>];
h=(<span class="hljs-keyword">struct</span> node*)<span class="hljs-built_in">malloc</span>(<span class="hljs-keyword">sizeof</span>(<span class="hljs-keyword">struct</span> node));
FILE *fp;
<span class="hljs-class"><span class="hljs-keyword">struct</span> <span class="hljs-title">node</span> *<span class="hljs-title">p</span>,*<span class="hljs-title">q</span>,*<span class="hljs-title">r</span>,*<span class="hljs-title">n</span>;</span>
p=h;
r=p;
n=p;
fp=fopen(<span class="hljs-string">"book.txt"</span>,<span class="hljs-string">"r"</span>);
<span class="hljs-keyword">if</span>(fp==<span class="hljs-literal">NULL</span>)
{
<span class="hljs-built_in">printf</span>(<span class="hljs-string">"文件打开失败"</span>);
}<span class="hljs-keyword">else</span>{
<span class="hljs-comment">//printf("文件打开成功\n");</span>
<span class="hljs-keyword">while</span>(<span class="hljs-built_in">fscanf</span>(fp,<span class="hljs-string">" %d %s %s"</span>,&id,name_stu,address_stu)!=EOF)
{
q=(<span class="hljs-keyword">struct</span> node*)<span class="hljs-built_in">malloc</span>(<span class="hljs-keyword">sizeof</span>(<span class="hljs-keyword">struct</span> node));
<span class="hljs-built_in">strcpy</span>(q->data.name,name_stu);
<span class="hljs-built_in">strcpy</span>(q->data.address,address_stu);
q->data.id=id;
q->next=<span class="hljs-literal">NULL</span>;
p->next=q;
p=p->next;
}
}
fclose(fp);
<span class="hljs-comment">//printf("结束\n\n");</span>
<span class="hljs-comment">//2.找到对应学生</span>
<span class="hljs-built_in">printf</span>(<span class="hljs-string">"\n\n\n\n\n\n\n\n\n\n\n\n"</span>);
<span class="hljs-built_in">printf</span>(<span class="hljs-string">" 请输入您所要修改学生的ID:"</span>);
<span class="hljs-built_in">scanf</span>(<span class="hljs-string">"%d"</span>,&searchId);
<span class="hljs-built_in">printf</span>(<span class="hljs-string">"您将选择ID为%d的学生!!!\n"</span>,searchId);
r=r->next;
<span class="hljs-keyword">while</span>(r!=<span class="hljs-literal">NULL</span>)
{
<span class="hljs-keyword">if</span>(searchId==r->data.id){
<span class="hljs-comment">//初始化变量</span>
NewId=r->data.id;
<span class="hljs-built_in">strcpy</span>(NewName,r->data.name);
<span class="hljs-built_in">strcpy</span>(NewAddress,r->data.address);
<span class="hljs-built_in">printf</span>(<span class="hljs-string">">>>>>>>>>>>>%s\n"</span>,r->data.name);
<span class="hljs-built_in">printf</span>(<span class="hljs-string">">>>>>>>>>>>>%s\n"</span>,r->data.address);
<span class="hljs-keyword">while</span>(<span class="hljs-literal">true</span>)
{
<span class="hljs-built_in">printf</span>(<span class="hljs-string">" 请输入您要改的项目(1:学号、2:姓名、3:地址、-1:确认修改):"</span>);
<span class="hljs-built_in">scanf</span>(<span class="hljs-string">"%d"</span>,&x);
getchar();
<span class="hljs-comment">//获取新学号</span>
<span class="hljs-keyword">if</span>(x==<span class="hljs-number">1</span>){
<span class="hljs-built_in">printf</span>(<span class="hljs-string">" 请输入新学号:"</span>);
<span class="hljs-built_in">scanf</span>(<span class="hljs-string">"%d"</span>,&NewId);
getchar();
<span class="hljs-built_in">printf</span>(<span class="hljs-string">"\n+++++++++%d\n"</span>,NewId);
}
<span class="hljs-comment">//获取新姓名</span>
<span class="hljs-keyword">if</span>(x==<span class="hljs-number">2</span>){
<span class="hljs-built_in">printf</span>(<span class="hljs-string">" 请输入新姓名:"</span>);
gets(NewName);
<span class="hljs-built_in">printf</span>(<span class="hljs-string">"\n+++++++++%s\n"</span>,NewName);
}
<span class="hljs-comment">//获取新地址</span>
<span class="hljs-keyword">if</span>(x==<span class="hljs-number">3</span>){
<span class="hljs-built_in">printf</span>(<span class="hljs-string">"请输入新地址:"</span>);
gets(NewAddress);
<span class="hljs-built_in">printf</span>(<span class="hljs-string">"\n+++++++++%s\n"</span>,NewAddress);
}
<span class="hljs-comment">//确认修改</span>
<span class="hljs-keyword">if</span>(x==<span class="hljs-number">-1</span>){
<span class="hljs-keyword">break</span>;
}
}
<span class="hljs-comment">//确认修改信息</span>
r->data.id=NewId;
<span class="hljs-built_in">strcpy</span>(r->data.name,NewName);
<span class="hljs-built_in">strcpy</span>(r->data.address,NewAddress);
<span class="hljs-built_in">printf</span>(<span class="hljs-string">"修改成功!!!\n新学号为:%d 新姓名为:%s 新地址为:%s\n"</span>,r->data.id,r->data.name,r->data.address);
<span class="hljs-keyword">break</span>;
}
r=r->next;
}
<span class="hljs-comment">//存档</span>
n=n->next;
fp=fopen(<span class="hljs-string">"book.txt"</span>,<span class="hljs-string">"w"</span>);
<span class="hljs-keyword">if</span>(fp==<span class="hljs-literal">NULL</span>)
{
<span class="hljs-built_in">printf</span>(<span class="hljs-string">"文件打开失败\n"</span>);
<span class="hljs-built_in">exit</span>(<span class="hljs-number">1</span>);
}
<span class="hljs-comment">//fprintf(fp,"\n");</span>
<span class="hljs-keyword">while</span>(n!=<span class="hljs-literal">NULL</span>)
{
<span class="hljs-built_in">fprintf</span>(fp,<span class="hljs-string">"%-20d %-20s %-20s\n"</span>,n->data.id,n->data.name,n->data.address);
n=n->next;
}
fclose(fp);
}
<span class="hljs-comment">//五、删除指定学生信息</span>
<span class="hljs-type">void</span> <span class="hljs-title function_">delete_students</span><span class="hljs-params">(<span class="hljs-keyword">struct</span> node *h)</span>
{
system(<span class="hljs-string">"cls"</span>);
<span class="hljs-comment">//变量</span>
<span class="hljs-type">int</span> searchId;<span class="hljs-comment">// x:选项 searchId:按学号搜</span>
<span class="hljs-comment">//1.读取文件,并将内容重新放到结构体p中</span>
<span class="hljs-type">int</span> id;
<span class="hljs-type">char</span> name_stu[<span class="hljs-number">60</span>],address_stu[<span class="hljs-number">60</span>],s_name[<span class="hljs-number">60</span>],s_address[<span class="hljs-number">60</span>];
h=(<span class="hljs-keyword">struct</span> node*)<span class="hljs-built_in">malloc</span>(<span class="hljs-keyword">sizeof</span>(<span class="hljs-keyword">struct</span> node));
FILE *fp;
<span class="hljs-class"><span class="hljs-keyword">struct</span> <span class="hljs-title">node</span> *<span class="hljs-title">p</span>,*<span class="hljs-title">q</span>,*<span class="hljs-title">r</span>,*<span class="hljs-title">m</span>,*<span class="hljs-title">n</span>,*<span class="hljs-title">k</span>;</span><span class="hljs-comment">//m:用来切割节点保存前一个节点</span>
p=h;
r=p;<span class="hljs-comment">//查询指针</span>
m=p;<span class="hljs-comment">//</span>
n=r;<span class="hljs-comment">//存数据指针</span>
fp=fopen(<span class="hljs-string">"book.txt"</span>,<span class="hljs-string">"r"</span>);
<span class="hljs-keyword">if</span>(fp==<span class="hljs-literal">NULL</span>)
{
<span class="hljs-built_in">printf</span>(<span class="hljs-string">"文件打开失败"</span>);
}<span class="hljs-keyword">else</span>{
<span class="hljs-comment">//printf("文件打开成功\n");</span>
<span class="hljs-keyword">while</span>(<span class="hljs-built_in">fscanf</span>(fp,<span class="hljs-string">" %d %s %s"</span>,&id,name_stu,address_stu)!=EOF)
{
q=(<span class="hljs-keyword">struct</span> node*)<span class="hljs-built_in">malloc</span>(<span class="hljs-keyword">sizeof</span>(<span class="hljs-keyword">struct</span> node));
<span class="hljs-built_in">strcpy</span>(q->data.name,name_stu);
<span class="hljs-built_in">strcpy</span>(q->data.address,address_stu);
q->data.id=id;
q->next=<span class="hljs-literal">NULL</span>;
p->next=q;
p=p->next;
}
}
fclose(fp);
<span class="hljs-comment">//2.找到对应学生</span>
<span class="hljs-built_in">printf</span>(<span class="hljs-string">"\n\n\n\n\n\n\n\n\n\n\n\n"</span>);
<span class="hljs-built_in">printf</span>(<span class="hljs-string">" 请输入您所要删除学生的学生号"</span>);
<span class="hljs-built_in">scanf</span>(<span class="hljs-string">"%d"</span>,&searchId);
getchar();
<span class="hljs-comment">//printf("您将选择ID为%d的学生!!!\n",searchId);</span>
<span class="hljs-comment">//r=r->next;</span>
<span class="hljs-comment">//m=r->next;</span>
<span class="hljs-keyword">while</span>(r->next!=<span class="hljs-literal">NULL</span>)
{
<span class="hljs-comment">//printf("%d ",r->data.id);</span>
<span class="hljs-comment">//printf("%d \n",m->data.id);</span>
k=r;
r=r->next;
<span class="hljs-keyword">if</span>(searchId==r->data.id)
{
<span class="hljs-comment">//printf("YYYYYYYYYYYYYYYYYYY");</span>
k->next=r->next;
<span class="hljs-built_in">free</span>(r);
r=k->next;
<span class="hljs-keyword">break</span>;
}
}
<span class="hljs-built_in">printf</span>(<span class="hljs-string">" 删除成功\n"</span>);
<span class="hljs-comment">//输出r链表 测试是否修改成功 为存档做准备</span>
<span class="hljs-comment">//n=n->next;</span>
<span class="hljs-comment">//printf("========打印r链表=========\n");</span>
<span class="hljs-comment">//printf("测试%d\n",n->data.id);</span>
<span class="hljs-comment">//while(n!=NULL){</span>
<span class="hljs-comment">// printf("%d %s %s\n",n->data.id,n->data.name,n->data.address);</span>
<span class="hljs-comment">// n=n->next;</span>
<span class="hljs-comment">//}</span>
<span class="hljs-comment">//printf("========打印r链表结束=========\n");</span>
<span class="hljs-comment">//存档</span>
n=n->next;
fp=fopen(<span class="hljs-string">"book.txt"</span>,<span class="hljs-string">"w"</span>);
<span class="hljs-keyword">if</span>(fp==<span class="hljs-literal">NULL</span>)
{
<span class="hljs-built_in">printf</span>(<span class="hljs-string">"文件打开失败\n"</span>);
<span class="hljs-built_in">exit</span>(<span class="hljs-number">1</span>);
}
<span class="hljs-comment">//fprintf(fp,"\n");</span>
<span class="hljs-keyword">while</span>(n!=<span class="hljs-literal">NULL</span>)
{
<span class="hljs-built_in">fprintf</span>(fp,<span class="hljs-string">"%-20d %-20s %-20s\n"</span>,n->data.id,n->data.name,n->data.address);
n=n->next;
}
fclose(fp);
main();
<span class="hljs-comment">// https://www.couragesteak.com/</span>
}
</code></div></pre>
留言