| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 474 人关注过本帖
标题:简单的人事管理系统课设,现在出现了一个问题,第二次往文件里写数据时程序 ...
只看楼主 加入收藏
jesus_lew
Rank: 1
等 级:新手上路
帖 子:5
专家分:0
注 册:2012-4-26
结帖率:0
收藏
已结贴  问题点数:20 回复次数:4 
简单的人事管理系统课设,现在出现了一个问题,第二次往文件里写数据时程序崩溃,求助
课设.rar (2.76 KB)

第一次运行,很良好,数据也存进文件里了。第二次运行文件读取Ok,进行操作也ok,但是再把数据写回文件就不行了。而且文件第二次写入的时候成功打开了,就是写不进去。调试到最后一步说“x0fcdad4a (msvcp100d.dll) 处最可能的异常: 0xC0000005: 读取位置 0x00578514 时发生访问冲突”。。求原因啊
搜索更多相关主题的帖子: 数据 
2012-04-26 15:10
jesus_lew
Rank: 1
等 级:新手上路
帖 子:5
专家分:0
注 册:2012-4-26
收藏
得分:0 
程序代码:
#ifndef PERSON_H
#define PERSON_H
#include <iostream>
using namespace std;
#include <string.h>
#include <string>
#include <list>
#include <fstream>
class Birth
{
private:
    int year;
    int month;
    int day;
public:
    Birth():year(0),month(0),day(0){};
    void setYear(int a){ year=a;}
    void setMonth(int a){ month=a;}
    void setDay(int a){ day=a;}
    int getYear(){ return year;}
    int getMonth(){ return month;}
    int getDay(){ return day;}

};
class Person : public Birth
{
private:
    string name;
    string id;
    string worknum;
    string tel_num;
    string sex;
    string apartment;
    string salary;
    string post;
public:
    int a;
    string b;
    Person():name(),id(),worknum(),tel_num(),sex(),apartment(),salary(),post(){};
    void setName(string a){ name=a; }
    void setId(string a){ id=a; }
    void setWorknum(string a){ worknum=a; }
    void setTel_num(string a){ tel_num=a; }
    void setSex(string a){ sex=a;}
    void setApartment(string a){ apartment=a; }
    void setSalary(string a){ salary=a; }
    void setPost(string a){ post=a; }
    void setBirth();
    string getName(){ return name;}
    string getSex(){ return sex;}
    string getTel_num(){ return tel_num;}
    string getApartment(){ return apartment;}
    string getPost(){ return post;}
    string getId(){ return id;}
    string getWorknum(){ return worknum;}
    string getSalary(){ return salary;}
    friend ostream &operator <<(ostream &,Person &);
    void set();
};
void Person::setBirth()
{
    cout<<"输入出生年份:1900~2012";
        cin>>a;
        cin.ignore();
        cout<<endl;
        while(a<1900||a>2012)
        {
                cout<<"超出范围,请重新输入出生年份:1900~2012:\t";
                cin>>a;
                cin.ignore();
                cout<<endl;
        }
        setYear(a);
        cout<<"输入出生月份:1~12";
        cin>>a;
        cin.ignore();
        cout<<endl;
        while(a<1||a>12)
        {
            cout<<"超出范围,请重新输入出生月份:1~12:\t";
            cin>>a;
            cin.ignore();
            cout<<endl;
        }
        setMonth(a);
        cout<<"输入出生天:1~31:\t";
        cin>>a;
        cin.ignore();
        cout<<endl;
        while(a<1||a>31)
        {
            cout<<"超出范围,请重新输入出生天:1~31";
            cin>>a;
            cin.ignore();
            cout<<endl;
        }
        setDay(a);
}
ostream &operator <<(ostream &strm,Person &obj)
{
    strm<<"姓名:"<<obj.getName()<<endl<<"性别:"<<obj.getSex()
        <<endl<<"生日:"<<obj.getYear()<<""<<obj.getMonth()<<""<<obj.getDay()<<""<<endl<<"身份证号码:"<<obj.getId()<<endl
        <<"部门:"<<obj.getApartment()<<endl<<"职务:"<<obj.getPost()<<endl
        <<"薪水:"<<obj.getSalary()<<"/月"<<endl<<"电话号码:"<<obj.getTel_num()<<endl;
    return strm;
}
void Person::set()
{
    cout<<"请输入姓名:";
    getline(cin,b);
    setName(b);
    cout<<endl;
    cout<<"请输入性别:";
    getline(cin,b);
    setSex(b);
    cout<<endl;
    cout<<"请输入生日:";
    setBirth();
    cout<<endl;
    cout<<"请输入身份证号码:";
    getline(cin,b);
    setId(b);
    cout<<endl;
    cout<<"请输入部门:";
    getline(cin,b);
    setApartment(b);
    cout<<endl;
    cout<<"请输入职务:";
    getline(cin,b);
    setPost(b);
    cout<<endl;
    cout<<"请输入工作号:";
    getline(cin,b);
    setWorknum(b);
    cout<<endl;
    cout<<"请输入薪水:";
    getline(cin,b);
    setSalary(b);
    cout<<endl;
    cout<<"请输入电话号码:";
    getline(cin,b);
    setTel_num(b);
    cout<<endl;
}
#endif
#ifndef MANAMENU_H
#define MANAMENU_H
#include "Person.h"
list <Person> stu;
list <Person>::iterator iter;
list <Person>::iterator it;
Person s,q;
void open()
{   fstream file;

    file.open("stu.dat",ios::in|ios::binary);
    if(file.fail())
        cout<<"打开文件失败!";
    file.read((char *)&s,sizeof(Person));
    while(!file.eof())
    {
        stu.clear();
        stu.push_back(s);
   
        cout<<s;
        file.read((char *)&s,sizeof(Person));
    }
    cout<<"文件读取完毕!"<<endl;
    system("cls");
    file.close();
}
void save()
{ 
    fstream file;
    it=stu.begin();
    file.open("stu.dat",ios::out|ios::binary);
    if(file.fail())
    { cout<<"文件打开失败!"<<endl;}
    while(it!=stu.end())
    {
        q=*it;
        file.write((char *)&q,sizeof(Person));
        cout<<q<<endl;
        ++it;
    }
    it=stu.begin();
    cout<<"文件保存成功!感谢使用!"<<endl;
    exit(getchar());

}
void Managemenu()
{
    char choice;
    void open();
    void insert();
    void delone();
    void delall();
    void revise();
    void display();
    void search();
    void mainmenu();

    cout<<"                         "<<endl
    <<"                  1.添加员工信息"<<endl

    <<"                  2.删除员工信息"<<endl
  
    <<"                  3.清空所有信息"<<endl
  
    <<"                  4.修改员工信息"<<endl
  
    <<"                  5.显示所有信息"<<endl
  
    <<"                  6.查找员工信息"<<endl

    <<"               7.返回主菜单  "<<endl;


              
    choice=getchar();
    cin.ignore();
    while(choice<'1'||choice>'7')
    {
        cout<<"选择无效,请重新选择:"<<endl;
        cin>>choice;
        cin.ignore();
    }
    switch(choice)
    {
    case '1':system("cls");insert();
    case '2':system("cls");delone();
    case '3':system("cls");delall();
    case '4':system("cls");revise();
    case '5':system("cls");display();
    case '6':system("cls");search();
    case '7':system("cls");mainmenu();

    }
}
void mainmenu()
{
    char choice;


    cout<<"           1.进入管理菜单          "<<endl;

    cout<<"           2.保存并退出程序              "<<endl;

    choice=getchar();
    cin.ignore();
    system("cls");
    switch(choice)
    {
    case '1':{ Managemenu();}
    case '2':{  save();}
    }
}

void insert()
{
    string m;
    s.set();
    stu.push_back(s);
    cout<<"是否继续添加员工?y表示'是',其他任意键表示'否'";
    getline(cin,m);
    while(m=="y")
    {
        s.set();
        stu.push_back(s);
        cout<<"是否继续添加员工?y表示'是',其他任意键表示'否'";
        getline(cin,m);
    }
    system("cls");
    Managemenu();
}
void delone()
{ 
    string m;
    iter=stu.begin();
    cout<<"请输入要删除的员工姓名:";
    getline(cin,m);
    while(iter->getName()!=m&&iter!=stu.end())
    {
        iter++;
    }
    cout<<*iter;
    cout<<"确认删除此员工信息?y表示'是',其他任意键表示'否'";
    getline(cin,m);
    if(m=="y")
    {
        stu.erase(iter);
        cout<<"信息删除成功!";
    }
    cout<<"按任意键返回管理菜单:";
    system("pause");
    system("cls");
    Managemenu();
}
void delall()
{
    string m;
    cout<<"确认删除所有员工信息?y表示'是',其他任意键表示'否";
    getline(cin,m);
    if(m=="y")
    {
        stu.clear();
        cout<<"信息删除成功!";
    }
    cout<<"按任意键返回管理菜单:";
    system("pause");
    system("cls");
    Managemenu();
}
void revise()
{
    string m;
    cout<<"请输入要修改的员工姓名:";
    iter=stu.begin();
    getline(cin,m);
    while(iter->getName()!=m&&iter!=stu.end())
    {
        iter++;
    }
    cout<<*iter;
    cout<<"确认修改此员工信息?y表示'是',其他任意键表示'否'";
    getline(cin,m);
    if(m=="y")
    {
        s.set();
        stu.insert(iter,s);
        stu.erase(iter);
        cout<<"信息修改成功!";
    }
    cout<<"按任意键返回管理菜单:";
    system("pause");
    system("cls");
    Managemenu();
}
void display()
{
    iter=stu.begin();
    while(iter!=stu.end())
    {
        cout<<*iter;
        iter++;
    }
    cout<<"信息显示完毕!";
    cout<<"按任意键返回管理菜单"<<endl;
    system("pause");
    system("cls");
    Managemenu();
}
void search()
{
    string m;
    iter=stu.begin();
    cout<<"输入要查找的员工姓名:";
    getline(cin,m);
    while(iter->getName()!=m&&iter!=stu.end())
    {
        iter++;
    }
    cout<<*iter;
    cout<<"信息显示完毕!";
    cout<<"按任意键返回管理菜单"<<endl;
    system("pause");
    system("cls");
    Managemenu();
}
#endif
#include "Manamenu.h"
int main()
{
    open();
    mainmenu();
    return 0;
}

这是代码。。求帮忙看下。。
2012-04-26 15:52
天使梦魔
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:37
帖 子:564
专家分:2754
注 册:2007-8-29
收藏
得分:20 
复制了你的代码到g++编译器里面去编译了一下,只用一张CPP我把多余的H文件合并了.

粗略看了一下:
运行几次也正常就是无法保存,你确认保存代码写的正确?
或者思路有问题?
2012-04-26 17:35
jesus_lew
Rank: 1
等 级:新手上路
帖 子:5
专家分:0
注 册:2012-4-26
收藏
得分:0 
思路应该没什么问题。save()函数我这段代码里少了个file.close()不过应该不是主要原因。现在我不知道怎么搞的又可以成功保存了。只不过最后按任意键结束会崩溃,但数据已经存到文件了。不知道什么原因,上次一个程序也是最后一步任意键继续后崩溃。
2012-04-26 17:56
jesus_lew
Rank: 1
等 级:新手上路
帖 子:5
专家分:0
注 册:2012-4-26
收藏
得分:0 
回复 3楼 天使梦魔
思路应该没什么问题。save()函数我这段代码里少了个file.close()不过应该不是主要原因。现在我不知道怎么搞的又可以成功保存了。只不过最后按任意键结束会崩溃,但数据已经存到文件了。不知道什么原因,上次一个程序也是最后一步任意键继续后崩溃。
2012-04-26 17:58
快速回复:简单的人事管理系统课设,现在出现了一个问题,第二次往文件里写数据时 ...
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.029482 second(s), 9 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved