因为我曾经做题都不看书。结果c语言书上的最后面文件的输入输出没有看。昨天学长让我们写个管理系统。我懵了。
。
就花了一个小时看了看文件的输入输出。就先写个简单的学生信息管理系统把。
假设遗漏希望各位留言指出。
。
我会改进的。
因为第一次写,代码粗糙请见谅。。
。
对了,我还发现一个问题,希望会的博友能回复下。
我想怎样才干把写入文件的数据在文本中换行。
我在文件后加上fputc('\n'),是实现换行了,但是在查找的时候查找不到。
希望有人可以解答。
。
谢谢。!
#include <stdio.h>
#include <algorithm>
#include <string.h>
#include <stdlib.h>
#include <windows.h>
using namespace std;
struct node
{
char name[20],banji[20];//学生的姓名。班级
char age[5],xuehao[21];//学生的年龄,学号。当然能够加入其他具体信息,比方手机号码,家庭住址等等、
}stu[500];
FILE *fp;
int i;
bool cmp1(node x,node y)//依照学生的班级排序
{
if(strcmp(x.banji,y.banji)<0) return true;
if(strcmp(x.banji,y.banji)==0&&strcmp(x.xuehao,y.xuehao)<0) return true;
return false;
}
bool cmp2(node x,node y)//依照学生的学号排序
{
if(strcmp(x.xuehao,y.xuehao)<0) return true;
if(strcmp(x.xuehao,y.xuehao)==0&&strcmp(x.banji,y.banji)<0) return true;
return false;
}
void find()
{
if((fp=fopen("susu.doc","r"))==NULL)
{
printf("不能打开文件\n");
exit(0) ;
}
while(1)
{
system("cls");
printf("**************************学生信息查找界面********************************\n");
printf(" 1.依据姓名和班级查找\t\t2.依据学号查找\n");
printf(" 3.返回主界面\n");
printf("**************************************************************************\n");
char ch=getchar();
if(ch=='1')
{
while(1)
{
system("cls");//清屏
int mark=-1;
char na[20],ban[20];
printf("请输入学生班级:");
scanf("%s",ban);
printf("请输入学生姓名:");
scanf("%s",na);
for(int j=0;j<i;j++)
{
fread(&stu[j],sizeof(struct node),1,fp);
if(strcmp(stu[j].name,na)==0&&strcmp(stu[j].banji,ban)==0)
mark=j;
}
if(mark!=-1)
printf("%s %s %s %s\n",stu[mark].name,stu[mark].banji,stu[mark].xuehao,stu[mark].age);
else
printf("没有这个人\n");
fclose(fp);
getchar();
printf("是否继续查找?是【Y】/否【N】");
char ch=getchar();
if(ch=='n'||ch=='N')
break;
}
}
if(ch=='2')
{
while(1)
{
system("cls");
char num[21];
int mark=-1;
printf("请输入学生学号\n");
scanf("%s",num);
for(int j=0;j<i;j++)
{
fread(&stu[j],sizeof(struct node),1,fp);
if(strcmp(stu[j].xuehao,num)==0)
mark=j;
}
if(mark!=-1)
printf("姓名:%s\t班级:%s\t学号:%s\t年龄:%s\n",stu[mark].name,stu[mark].banji,stu[mark].xuehao,stu[mark].age);
else
printf("没有此学号\n");
fclose(fp);
getchar();
printf("是否继续查找?是【Y】/否【N】");
char ch=getchar();
if(ch=='n'||ch=='N')
break;
}
}
if(ch=='3')
break;
}
}
void add()//添加
{
if((fp=fopen("susu.doc","a"))==NULL)
{
printf("不能打开文件\n");
exit(0) ;
}
printf("**************************学生信息加入界面********************************\n");
while(1)
{
system("cls");//清屏
printf("请输入学生的班级:");
scanf("%s",stu[i].banji);
printf("请输入学生的姓名:");
scanf("%s",stu[i].name);
printf("请输入学生的学号: ");
scanf("%s",&stu[i].xuehao);
printf("请输入学生的年龄: ");
scanf("%s",&stu[i].age);
if(fwrite(&stu[i],sizeof(struct node),1,fp)!=1)
printf("写入错误\n");
else
printf("写入成功\n");
getchar();
printf("是否继续输入?是【Y】/否【N】");
char ch=getchar();
if(ch=='y'||ch=='Y')
i++;
else
break;
}
fclose(fp);
}
void del()//解释下删除的过程,就是先仅仅读文件,找到须要删除的那个人,然后mark标记一下。在写文件。当写到mark时跳过。
{
while(1)
{
system("cls");
printf("**************************学生信息删除界面********************************\n");
printf(" 1.依据姓名和班级删除\t\t2.依据学号删除\n");
printf(" 3.返回主菜单\n");
printf("**************************************************************************\n");
char ch=getchar();
if(ch=='1')
{
while(1)
{
system("cls");
if((fp=fopen("susu.doc","rb"))==NULL)
{
printf("error\n");
exit(0);
}
int mark=-1;
char na[20],ban[20];
printf("请输入学生班级:");
scanf("%s",ban);
printf("请输入学生姓名:");
scanf("%s",na);
for(int j=0;j<i;j++)
{
fread(&stu[j],sizeof(struct node),1,fp);
if(strcmp(stu[j].name,na)==0&&strcmp(stu[j].banji,ban)==0)
{
mark=j;
printf("确认删除:姓名:%s\t班级:%s\t学号:%s\t年龄:%s\n吗?(Y/N)\n",stu[mark].name,stu[mark].banji,stu[mark].xuehao,stu[mark].age);
break;
}
}
fclose(fp);
if(mark==-1)
printf("找不到这个人\n");
else
{
getchar();
char ch=getchar();
if(ch=='y'||ch=='Y')
{
fp=fopen("susu.doc","wb");
for(int j=0;j<i;j++)
{
if(j!=mark)
fwrite(&stu[j],sizeof(struct node),1,fp);
}
fclose(fp);
printf("删除成功\n");
}
else
printf("删除失败\n");
}
getchar();
printf("是否继续删除?是【Y】/否【N】\n");
ch=getchar();
if(ch=='y'||ch=='Y')
i--;
else
break;
}
}
if(ch=='2')
{
while(1)
{
system("cls");
if((fp=fopen("susu.doc","rb"))==NULL)
{
printf("error\n");
exit(0);
}
int mark=-1;
char num[21];
printf("请输入学生学号:");
scanf("%s",num);
for(int j=0;j<i;j++)
{
fread(&stu[j],sizeof(struct node),1,fp);
if(strcmp(stu[j].xuehao,num)==0)
{
mark=j;
printf("确认删除:姓名:%s\t班级:%s\t学号:%s\t年龄:%s\n吗?(Y/N)\n",stu[mark].name,stu[mark].banji,stu[mark].xuehao,stu[mark].age);
break;
}
}
fclose(fp);
if(mark==-1)
printf("找不到这个人\n");
else
{
getchar();
char ch=getchar();
if(ch=='y'||ch=='Y')
{
fp=fopen("susu.doc","wb");
for(int j=0;j<i;j++)
{
if(j!=mark)
fwrite(&stu[j],sizeof(struct node),1,fp);
}
fclose(fp);
printf("删除成功\n");
}
else
printf("删除失败\n");
}
getchar();
printf("是否继续删除?是【Y】/否【N】\n");
ch=getchar();
if(ch=='y'||ch=='Y')
i--;
else
break;
}
}
if(ch=='3')
break;
}
}
void sca()//浏览
{
system("cls");
printf("**************************学生信息浏览界面********************************\n");
if((fp=fopen("susu.doc","rb"))==NULL)
{
printf("error\n");
exit(0);
}
printf(" \t姓名\t\t班级\t\t学号\t\t年龄\n");
for(int j=0;j<i;j++)
{
fread(&stu[j],sizeof(struct node),1,fp);
printf("%15s%15s%15s%15s\n",stu[j].name,stu[j].banji,stu[j].xuehao,stu[j].age);
}
printf("**************************************************************************\n");
fclose(fp);
system("pause");
}
void arry()//排序
{
if((fp=fopen("susu.doc","rb"))==NULL)
{
printf("error\n");
exit(0);
}
while(1)
{
node sort_temp[500];
system("cls");
printf("**************************学生信息排序界面********************************\n");
printf(" 1.依据班级排序\t\t2.依据学号排序\n");
printf(" 3.返回主菜单\n");
printf("**************************************************************************\n");
char ch=getchar();
if(ch=='1')
{
for(int j=0;j<i;j++)
{
fread(&stu[j],sizeof(struct node),1,fp);
sort_temp[j]=stu[j];
}
fclose(fp);
fp=fopen("susu.doc","wb");
sort(sort_temp,sort_temp+i,cmp1);
for(int j=0;j<i;j++)
fwrite(&sort_temp[j],sizeof(struct node),1,fp);
fclose(fp);
sca();
}
if(ch=='2')
{
for(int j=0;j<i;j++)
{
fread(&stu[j],sizeof(struct node),1,fp);
sort_temp[j]=stu[j];
}
fclose(fp);
fp=fopen("susu.doc","wb");
sort(sort_temp,sort_temp+i,cmp2);
for(int j=0;j<i;j++)
fwrite(&sort_temp[j],sizeof(struct node),1,fp);
fclose(fp);
sca();
}
if(ch=='3')
break;
}
}
int get_i()//获得有多少个学生
{
if((fp=fopen("susu.doc","r"))==NULL)
fopen("susu.doc","w");
for(i=0;;i++)
{
if(fread(&stu[i],sizeof(struct node),1,fp)==1)
continue;
else
break;
}
fclose(fp);
return i;
}
int main()
{
while(1)
{
system("cls");
printf("**************************学生信息管理系统********************************\n");
printf(" 如今本院共同拥有学生%d人\n",get_i());
printf(" 1.查询学生信息\t\t2.新增学生信息\n");
printf(" 3.删除学生信息\t\t4.浏览学生信息\n");
printf(" 5.学生信息排序\t\t6.退出程序\n");
printf("**************************************************************************\n");
char ch=getchar();
if(ch=='1')//查询学生信息
find();
else if(ch=='2')//加入学生信息
add();
else if(ch=='3')//删除学生信息
del();
else if(ch=='4')//浏览学生信息
sca();
else if(ch=='5')//对学生信息排序
arry();
else
return 0;
getchar();
}
return 0;
}
1.删除学生信息。找不到学生无回复已解决
![大笑](http://static.blog.csdn.net/xheditor/xheditor_emot/default/laugh.gif)