因为我曾经做题都不看书。结果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.删除学生信息。找不到学生无回复已解决