源码在这里,
主要目的就是以下三个
打印数据到屏幕
录入数据
退出程序
源码编译的时候没问题,但是一用就会出现错误,直接退出
下面是源码//学生档案管理
#include <iostream>
using namespace std;
struct Archives //档案结构体
{
char *name;
char *id;
char sex;
}student;
int Print(FILE *fp,struct Archives *p);//输出文件中保存的学生档案
int Input(FILE *fp);//输入学生档案至文件
int main(int argc ,char *argv[])
{
char i;
FILE *fp;
struct Archives *p;
p = &student;
cout <<"请输入要选择的操作:"<<'\n' //操作选择
<<"1.打印数据到屏幕"<<'\n'
<<"2.录入数据"<<'\n'
<<"3.退出程序"<<'\n'<<endl;
cin >> i;
while(i != '3')
{
if(i<'1' && i>'3')
{
cout << "请输入正确顺序!" <<endl;
break;
}
if((fp = fopen("temp.txt","wr")) == NULL)
{
cout << "文件打开失败!" << endl;
exit(EXIT_FAILURE);
}
switch(i)
{
case '1':
Print(fp,p);
break;
case '2':
Input(fp);
break;
case '3':
fclose(fp);
return 0;
}
cout <<"请输入要选择的操作:"<<'\n'
<<"1.打印数据到屏幕"<<'\n'
<<"2.录入数据"<<'\n'
<<"3.退出程序"<< endl;
cin >> i;
}
return 0;
}
int Print(FILE *fp,struct Archives *p)//输出文件中保存的学生档案
{
int i;
if(fgetc(fp) == EOF) //对文件判断
{
cout << "该文件夹为空文件夹" <<endl;
getchar();
return 0;
}
rewind(fp); //将光标移动至文件开头
while(feof(fp)) //输出文件内容
{
fscanf(fp,"%s,%s,%c",p->name,p->id,&p->sex);
cout << "第"<< i << "位成员"<< endl;
cout << "姓名:"<< p->name <<'\n'
<<"id:" << p->id << '\n'
<<"sex:" << p->sex << endl;
}
cout << "共" << i << "位成员" << endl;
return 0;
}
int Input(FILE *fp) //输入学生档案至文件
{
char c;
while(1)
{
struct Archives st; //输入学生信息
cout <<"请输入数据:"<< endl;
cout <<"姓名:" ;
cin >> st.name;
getchar();
cout << "id:" ;
cin >> st.id;
getchar();
cout << "性别:";
cin >> st.sex;
getchar();
bool i = true; //是否保存
while(i)
{
cout<< "是否保存数据类型?(Y/N)"<<endl;
cin >> c;
switch(c)
{
case 'y':
case 'Y':
i = false;
fprintf(fp,"%s,%s,%c",st.name,st.id,st.sex);
break;
case 'N':
case 'n':
i = false;
break;
default:
cout << "请输入正确字符!";
break;
}
}
i = true;
while(i) //是否继续录入
{
cout <<"是否继续录入数据?(Y/N)";
cin >> c;
switch(c)
{
case 'y':
case 'Y':
i = false;
break;
case 'N':
case 'n':
i = false;
return 0;
default:
cout << "请输入正确字符!";
break;
}
}
}
return 0;
}
图片是报错的内容 |