写c++二进制文件,每次输入学生记录,保存输入后记录总数目,调了指针可还是覆盖不掉上一次的值 15

这是课程设计遇到了瓶颈,希望朋友可以费心指点#include<iostream>#include<string>usingnamespacestd;voidsetup()... 这是课程设计遇到了瓶颈,希望朋友可以费心指点
#include <iostream>
#include <string>
using namespace std;
void setup()/*{}*/;
void display(){};
void reach(){};
void intotal(){};
void del(){};
void change(){};
struct student
{
string num;
string name;
char sex;
int age;
string roomnum;
string telnum;
string address;
};
int main()
{
int p;
while(1){
cout<<"学生信息管理\n1.输入学生信息\n2.输出所有记录\n3.学生信息查询\n4.统计学生信息\n5.删除学生信息\n6.修改学生信息\n7.清理屏幕\n8.退出\n"<<endl;
cout<<"输入选择功能的序号:\n";
cin>>p;
switch(p)
{
case 1:setup();break;
case 2:display();break;
case 3:reach();break;
case 4:intotal();break;
case 5:del();break;
case 6:change();break;
case 7:system("cls");break;
case 8:return 0;
}
}
return 0;
}
void setup()
{
int n,d,i;
FILE *fp,*fp1;
if((fp=fopen("students.txt","ab+"))==NULL) //以写方式打开二进制文件
{
cout<<"Cannot open text file. "<<endl;
exit(0);
}
if((fp=fopen("num.txt","ab+"))==NULL)
{
cout<<"Cannot open text file. "<<endl;
exit(0);
}
cout<<"请输入学生个数:";
cin>>n;
if (fread(&d,sizeof(int),1,fp1)!=NULL)
{
d=d+n;
fseek(fp,0,0);
fwrite(&d,sizeof(int),1,fp1);
}
else
{
d=n;
fwrite(&d,sizeof(int),1,fp);
}
fseek(fp,0,2);
cout<<d;
student *p=new student[n];
for (i=0;i<n;i++)
{
cout<<"\n请输入第"<<i+1<<"个学生信息:\n1.学号 2.姓名 3.性别 4.年龄 5.房间号 6.电话号码 7.地址\n";
cin>>p[i].num>>p[i].name>>p[i].sex>>p[i].age>>p[i].roomnum>>p[i].telnum>>p[i].address;

fwrite(&p[i], sizeof(student), 1, fp);
}
// system("cls");
fclose(fp);
cout<<"\n数据已保存,请再次输入选择项:\n\n\n";
}
具体是在setup()中的 if 函数,想保存动态输入后学生记录数,第一次直接保存n值,以后每次输入把以前的d读出来,相加后再存进去,可是存的时候有问题覆盖不掉原有的,每次输出仍是第一次存入的值..,上面的是建两个文件,原来是打算建一个的,哪个好呢
void setup()
{
int n,d,i;
FILE *fp;
if((fp=fopen("students.txt","ab+"))==NULL) //以写方式打开二进制文件
{
cout<<"Cannot open text file. "<<endl;
exit(0);
}
cout<<"请输入学生个数:";
cin>>n;
fseek(fp,0,0);
if (fread(&d,sizeof(int),1,fp)!=NULL)
{
d=d+n;
fseek(fp,0,0);
fwrite(&d,sizeof(int),1,fp);
}
else
{
d=n;
fwrite(&d,sizeof(int),1,fp);
}
fseek(fp,0,2);
cout<<d;
student *p=new student[n];
for (i=0;i<n;i++)
{
cout<<"\n请输入第"<<i+1<<"个学生信息:\n1.学号 2.姓名 3.性别 4.年龄 5.房间号 6.电话号码 7.地址\n";
cin>>p[i].num>>p[i].name>>p[i].sex>>p[i].age>>p[i].roomnum>>p[i].telnum>>p[i].address;

fwrite(&p[i], sizeof(student), 1, fp);
}
// system("cls");
fclose(fp);
cout<<"\n数据已保存,请再次输入选择项:\n\n\n";
}
展开
 我来答
手机用户40460
2011-06-17 · TA获得超过112个赞
知道答主
回答量:373
采纳率:0%
帮助的人:240万
展开全部
#include <iostream>
#include <fstream>
using namespace std;

int main()
{
ofstream oufile("file.txt",ios::binary);
char ab[1000];
cin.get(ab,1000,'#');//参数=>数组地址,地址长度,输入结束符号

for(int i=0;ab[i]!='\0';i++)//加密
{
if(ab[i]<='Z'&& ab[i]>='A')
ab[i]=(ab[i]-'A'+4)%('Z'-'A')+'A';
else if(ab[i]<='z' && ab[i]>='a')
ab[i]=(ab[i]-'a'+4)%('z'-'a')+'a';
}
oufile<<ab;
oufile.close();
ifstream xx("file.txt");
char ch;
while(xx>>noskipws>>ch)//解密
{
if(ch<='Z' && ch>='A')
ch=(ch+'Z'-'A'-4-'A')%('Z'-'A')+'A';
else if(ch<='z' && ch>='a')
ch=(ch+'z'-'a'-4-'a')%('z'-'a')+'a';
cout<<ch;
}
return 0;
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
kuaipou26
2011-06-15 · 超过29用户采纳过TA的回答
知道答主
回答量:327
采纳率:0%
帮助的人:0
展开全部
C语言用指针函数怎么实现十进制转,十六进制,八进制,二进制自己写的一段,#include
追问
????
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式