#include<fstream>
#include<cstring>
#include<stdio.h>
#include<iostream>
#include<stdlib.h>
using?namespace?std;
?
#define?OK?1
#define?ERROR?0
#define?OVERFLOW?-1
?
#define?List_INIT_SPACE?100???????????//存儲空間初始分配量
#define?List_INC_SPACE?10?????????????//存儲空間分配增量
int?node?=?1;
typedef?struct?Student
{
????int?age;??????????????????????????//年齡
????int?student_id;???????????????????//學(xué)號
????int?course_id;????????????????????//題目編號
????char?student_name[40];????????????//姓名
????char?sex[10];?????????????????????//性別
????char?Class[40];???????????????????//班級
????char?specialty[40];???????????????//專業(yè)
????char?course_name[40];?????????????//題目名稱
????char?keyword[40];?????????????????//關(guān)鍵詞
????char?technology[40];
}Student;
?
typedef?struct?STent_list
{
????struct?Student?*stu;?????????????//存儲空間基址
????int?length;???????????????????????//當(dāng)前長度
????int?listsize;?????????????????????//當(dāng)前分配的存儲容量(以sizeof(Student)為單位
}STent_list;
?
int?STent_listInit(STent_list?&S)
{
????//在內(nèi)存中分配空間
????S.stu?=?(Student*)malloc(List_INC_SPACE*sizeof(Student));
????if(!S.stu)?exit(OVERFLOW);??????//存儲空間分配失敗
?
????//構(gòu)造一個(gè)空的線性表
????S.length?=?0;
????S.listsize?=?List_INC_SPACE;?????//初始存儲容量
????return?OK;
}//函數(shù)STent_listInit結(jié)束
?
void?write(STent_list?&S,?int?n)
{
????fstream?myfile;
????myfile.open("student.txt",ios::out|ios::binary);
????//fstream?myfile("student.txt",ios::out|ios::binary);
????if(!?myfile)
????{
????????cout<<"該文件不能打開!"<<endl;
????????abort();????????//異常終止函數(shù)
????}
????int?count?=?n;
????myfile<<count<<endl<<endl;
????for(int?i?=?0;?i?<=?count;?i++)
????{
?????????myfile<<(S.stu[i]).student_id<<"???"<<(S.stu[i]).student_name<<"????"<<(S.stu[i]).sex<<"??"<<(S.stu[i]).age<<"????"<<(S.stu[i]).Class<<"????"<<(S.stu[i]).specialty<<"??"<<S.stu[i].course_id<<"???"<<S.stu[i].course_name<<"???"<<S.stu[i].keyword<<"???"<<S.stu[i].technology<<"????"<<endl;
????}
????myfile.close();
}
/**************************************/
//函數(shù)名:?read(STent_list?&S)
//參數(shù):???(傳入)?STent_list?S順序表
//返回值:?int型,返回1表示創(chuàng)建成功,0表示失敗
//功能:???讀取順序表中的內(nèi)容
/*************************************/
int?read(STent_list?&S)
{
????fstream?myfile;
????myfile.open("student.txt",ios::in|ios::binary);
????//fstream?myfile("student.txt",ios::out|ios::binary);
????if(!?myfile)
????{
????????cout<<"該文件不能打開"<<endl;
????????abort();
????}
????int?count;
????myfile.seekg(0);
????myfile>>count;
????for(int?i?=?0;?i?<=?count;?i++)
????{
????????myfile>>S.stu[i].student_id>>S.stu[i].student_name>>S.stu[i].sex>>S.stu[i].age>>S.stu[i].Class>>S.stu[i].specialty>>S.stu[i].course_id>>S.stu[i].course_name>>S.stu[i].keyword>>S.stu[i].technology;
????}
????myfile.close();
????return?count;
}
/*****************************************/
//函數(shù)名:add(STent_list?&S)
//參數(shù):???(傳入)STent_list?S,順序表
//返回值:??空
//功能:???添加學(xué)生信息
/*****************************************/
void?add(STent_list?&S)
{
????int?n?=?read(S);
????int?i?=?0;
????char?sign?=?'F';
????cout<<endl<<"請輸入增加的學(xué)生的相關(guān)信息:"<<endl;
????while(sign?!=?'N')
????{
????????loop:
????????????cout<<"學(xué)號:";
????????????cin>>S.stu[i].student_id;
????????????cout<<endl;
????????????int?c?=?0;
????????????while(c?<?i)
????????????{
????????????????c++;
????????????????if(S.stu[i].student_id?==?S.stu[i-c].student_id)
????????????????{
????????????????????cout<<"你輸入的學(xué)號已經(jīng)存在!請重新輸入"?<<endl;
????????????????????goto?loop;
????????????????}
????????????}
????????????cout<<"姓名:";
????????????cin>>S.stu[i].student_name;
????????????cout<<endl;
????????????cout<<"性別:";
????????????cin>>S.stu[i].sex;
????????????cout<<endl;
????????????cout<<"年齡:";
????????????cin>>S.stu[i].age;
????????????cout<<endl;
????????????cout<<"班級:";
????????????cin>>S.stu[i].Class;
????????????cout<<endl;
????????????cout<<"專業(yè):";
????????????cin>>S.stu[i].specialty;
????????????cout<<endl;
????????????cout<<"題目編號:";
????????????cin>>S.stu[i].course_id;
????????????cout<<endl;
????????????cout<<"題目名稱:";
????????????cin>>S.stu[i].course_name;
????????????cout<<endl;
????????????cout<<"關(guān)鍵詞:";
????????????cin>>S.stu[i].keyword;
????????????cout<<endl;
????????????cout<<"實(shí)現(xiàn)技術(shù):";
????????????cin>>S.stu[i].technology;
????????????cout<<endl;
????????????cout<<"提示:是否繼續(xù)寫入學(xué)生信息?(Y/N):";
????????????cin>>sign;
????????????i++;
????}
????write(S,?i);
}
/*****************************************************/
//函數(shù)名:?search_student_id(STent_list?&S)
//參數(shù):???(傳入)STent_list?S,順序表
//返回值:?空
//功能:???根據(jù)學(xué)號查找學(xué)生信息
/*****************************************************/
void?search_student_id(STent_list?&S)
{
????int?n?=?read(S);
????int?s;
????int?i?=?0;
????cout<<endl<<"查找學(xué)生信息:"<<endl;
????cout<<"請輸入需要查找學(xué)生的學(xué)號:"<<endl;
????cin>>s;
????while((S.stu[i].student_id?-?s)?!=?0?&&?i?<?n)?i++;
????if(i?==?n)
????{
????????cout<<"提示:?對不起,無法找到該學(xué)生的信息!?"<<endl;
????}
????else
????{
????????cout<<"***************************"<<endl;
????????cout<<"學(xué)號:"<<S.stu[i].student_id<<endl;
????????cout<<"姓名:"<<S.stu[i].student_name<<endl;
????????cout<<"性別:?"<<S.stu[i].sex<<endl;
????????cout<<"年齡:"<<S.stu[i].age<<endl;
????????cout<<"班級:"<<S.stu[i].Class<<endl;
????????cout<<"專業(yè):"<<S.stu[i].specialty<<endl;
????????cout<<"題目編號:"<<S.stu[i].course_id<<endl;
????????cout<<"題目名稱:"<<S.stu[i].course_name<<endl;
????????cout<<"關(guān)鍵詞:"<<S.stu[i].keyword<<endl;
????????cout<<"實(shí)現(xiàn)技術(shù):"<<S.stu[i].technology<<endl;
????}
}
/*******************************************************/
//函數(shù)名:?search_student_name(STent_list?&S)
//參數(shù):???(傳入)STent_list?S,順序表
//返回值:?空
//功能:???根據(jù)學(xué)生姓名查找學(xué)生信息
/*******************************************************/
void?search_student_name(STent_list?&S)
{
????int?n?=?read(S);
????char?a[100];
????cout<<"請輸入需要查找的姓名:"<<endl;
????cin>>a;
?????for(int?i?=?0;?i?<?n;?i++)
?????if(strcmp(S.stu[i].student_name,?a)?==?0)
?????{
?????????cout<<"****************************"<<endl;
?????????cout<<"學(xué)號:"<<S.stu[i].student_id<<endl;
?????????cout<<"姓名:"<<S.stu[i].student_name<<endl;
?????????cout<<"性別:?"<<S.stu[i].sex<<endl;
?????????cout<<"年齡:"<<S.stu[i].age<<endl;
?????????cout<<"班級:"<<S.stu[i].Class<<endl;
?????????cout<<"專業(yè):"<<S.stu[i].specialty<<endl;
?????????cout<<"題目編號:"<<S.stu[i].course_id<<endl;
?????????cout<<"題目名稱:"<<S.stu[i].course_name<<endl;
?????????cout<<"關(guān)鍵詞:"<<S.stu[i].keyword<<endl;
?????????cout<<"實(shí)現(xiàn)技術(shù):"<<S.stu[i].technology<<endl;
????}
}
/*******************************************************/
//函數(shù)名:??search_course_id(STent_list?&S)
//參數(shù):???(傳入)STent_list?S,順序表
//返回值:?空
//功能:???根據(jù)學(xué)生課程設(shè)計(jì)的編號查找
/*******************************************************/
void?search_course_id(STent_list?&S)
{
????int?n?=?read(S);
????int?b;
????int?i?=?0;
????cout<<"請輸入需要查找的題目編號:"<<endl;
????cin>>b;
????while((S.stu[i].course_id?-?b)?!=?0?&&?i?<?n)?i++;
????if(i?==?n)
????{
????????cout<<"提示:對不起,無法找到該信息!"<<endl;
????}
????else
????{
????????for(i?=?0;?i?<?n;?i++)
????????if(S.stu[i].course_id?-?b?==?0)
????????{
????????cout<<"******************************"<<endl;
????????cout<<"學(xué)號:"<<S.stu[i].student_id<<endl;
????????cout<<"姓名:"<<S.stu[i].student_name<<endl;
????????cout<<"性別:?"<<S.stu[i].sex<<endl;
????????cout<<"年齡:"<<S.stu[i].age<<endl;
????????cout<<"班級:"<<S.stu[i].Class<<endl;
????????cout<<"專業(yè):"<<S.stu[i].specialty<<endl;
????????cout<<"題目編號:"<<S.stu[i].course_id<<endl;
????????cout<<"題目名稱:"<<S.stu[i].course_name<<endl;
????????cout<<"關(guān)鍵詞:"<<S.stu[i].keyword<<endl;
????????cout<<"實(shí)現(xiàn)技術(shù):"<<S.stu[i].technology<<endl;
???????}
????}
}
這個(gè)程序能編譯但是運(yùn)行添加記錄的時(shí)候顯示打不開文件,麻煩幫忙看看,謝謝各位了
慕粉1642151114
2016-12-20 20:11:59