C语言VC中头文件CommonData.h找不到要怎么修改

你代码从哪里来的?

如果是从别人那拷贝来的,找那个人要一下这个文件,然后添加到工程里就可以了。

如果是从书上抄的,翻翻前面的内容,一般能找到这个.h的内容。

也可以先试试把这个头文件注释掉对代码有没有影响,如果没有影响,就删掉,如有有影响,就按上面的办法去解决。

C语言利用EasyX,在运行的系统里面公司信息的查询、修改、删除,怎么点不出来?

img

CommonData.h
/头文件:CommonData.h,用来定义本系统中所用到的各种重要的数据结构/
#ifndef COMMONDATA
#define COMMONDATA
//学生基本信息结构体,所有的学生基本信息数据均存储在StuBasIn.dat文件中
typedef struct
{
int isValid; //标记该学生记录是否有效:1表示有效,0表示无效,别的数字非法
char SNo[12]; //11位数字字符的学生学号
char SGender; //学生性别:M或m表示男,f或F表示女,别的字符非法
char SName[21]; //学生姓名,不超过20个字符,一汉字占两个字符
char SSpecialityCode[7]; //6位数字学生专业代码
int SGrade; //学生年级代码
int SClass; //学生班级代码
}StudentBasisInfor;
//学生所属专业基本信息结构体,所有的专业基本信息数据均存储在SpecInfo.dat文件中
typedef struct
{
char SpecialityCode[7]; //专业代码,固定为6个字符
char SpecialityName[51]; //专业名称,不超过50个字符
char SpecialityAliasName[21]; //专业别名,简称,不超过20个字符
char SpecialityIntruduce[501]; //专业介绍,不超过500字符
}SpecialityInfor;
//公司基本信息结构体,所有的公司基本信息数据均存储在CompanyInfo.dat文件中
typedef struct
{
char CompanyNo[7]; //公司代码,固定为6个数字字符
char CompanyName[51]; //公司名称,不超过50字符
char CompanyHistory[1001]; //公司历史,不超过1000字符
char CompanyProject[1001]; //公司项目,不超过1000字符
char PersonnelInfor[1001]; //人事信息,不超过1000字符
char SNo[5],Company[5];
}CompanyInfor;
//学生公司信息结构体,所有的学生所有的公司信息均存储在StuCompany.dat文件中
typedef struct
{
int isValid; //标记该学生公司信息是否有效:1有效,0无效
char SNo[12]; //学生学号
char CompanyNo[7]; //公司代码
char Company[5];
}StudentCompany;
//系统使用用户基本信息,所有用户信息均存储在UserInfo.dat文件中
typedef struct
{
char UName[21]; //用户名,不超过20个字符
char UPassword[21]; //用户密码,不超过20个字符
}UserInfo;
#endif

InputStuCompany.h
/头文件InputStuCompany.h,处理学生的公司信息的录入/
/所有学生的基本信息均保存在文件StuBasIn.dat中/
/所有的就业基本信息数据均存储在CompanyInfo.dat文件中/

#include <stdio.h>
#include <string.h>
#include "CommonData.h"
#include <conio.h>
#include "graphics.h"
#include "Windows.h"

/************************************************************/
/函数:int InputSingleStuSingleCompanyInfor() /
/功能:录入单个学生单家公司信息 /
/参数:无 /
/输入:用户输入学号、公司代码 /
/输出:无 /
/备注:无 /
/
************************************************/
int InputSingleStuSingleCompanyInfor()
{
HWND wnd = GetHWnd();
StudentBasisInfor oneStu;
CompanyInfor oneCompany;
oneCompany;
char SNoInput[12]; //用户输入的11位数字字符的学生学号
char CompanyNoInput[7]; //用户公司代码,固定为6个数字字符
char CompanyInput[5];
int len;
int isExist;
FILE *fpsbi,*fpci; //学生基本信息、公司信息文件指针
if((fpsbi=fopen("StuBasIn.dat","rb"))==NULL)//学生基本信息文件不存在
{
MessageBox(wnd,"无学生基本信息,无法添加公司信息\n请先创建学生基本信息","录入公司信息失败",
MB_OK |MB_ICONERROR);
return 0;
}

InputBox(SNoInput,12,"请输入11位学生学号");
len=strlen(SNoInput);
while(len!=11)
{
    MessageBox(wnd,"学号只能为11位!\n请重新输入","学号错误",MB_OK | MB_ICONERROR);
    InputBox(SNoInput,12,"请输入11位学生学号");
    len=strlen(SNoInput);
}
isExist=false;
while(!feof(fpsbi))
{
    int length=fread(&oneStu,sizeof(StudentBasisInfor),1,fpsbi);
    if(length==0)
        break;
    if(strcmp(oneStu.SNo,SNoInput)==0)    //该学号已存在
    {
        isExist=true;
        break;
    }
}
fclose(fpsbi);
if(!isExist)                        //如果该学号不存在,录入公司信息失败
{
    char strMsg[100];
    sprintf(strMsg,"该学号%s学生不存在,请查正后再录入。\n录入公司信息失败!",
        SNoInput);
    MessageBox(wnd,strMsg,"查无此人",MB_OK | MB_ICONERROR);
    return 0;
}
InputBox(CompanyNoInput,7,"请输入6位公司代码");
len=strlen(CompanyNoInput);
while(len!=6)
{
    MessageBox(wnd,"公司代码只能为6位!\n请重新输入","公司代码错误",MB_OK | MB_ICONWARNING);
    InputBox(CompanyNoInput,7,"请输入6位公司代码");
    len=strlen(CompanyNoInput);
}
isExist=false;
while(!feof(fpci))
{
    int length=fread(&oneCompany,sizeof(oneCompany),1,fpci);
    if(length==0)    break;
    if(strcmp(oneCompany.CompanyNo,CompanyNoInput)==0)    //公司代码已存在
    {
        isExist=true;
        break;
    }
}
fclose(fpci);

if((fpci=fopen("StuCompany.dat","rb"))==NULL)    //如果公司信息文件不存在,则新建之
{
    fpci=fopen("StuCompany.dat","wb+");
    fclose(fpci);
}else
    fclose(fpci);
fpci=fopen("StuCompany.dat","rb");
isExist=false;
while(!feof(fpci))
{
    int length=fread(&oneCompany,sizeof(oneCompany),1,fpci);
    if(length==0)    break;
    if    (strcmp(oneCompany.SNo,SNoInput)==0 &&    //如果名学生该公司信息已经存在
        strcmp(oneCompany.CompanyNo,CompanyNoInput)==0)
    {
        isExist=true;
        break;
    }
}
fclose(fpci);
if(isExist)
{
    char strMsg[200];
    sprintf(strMsg,"学生%s的%s公司信息已存在。无法再次录入\n录入公司信息!",
        oneCompany.SNo,oneCompany.CompanyNo,oneCompany.Company);
    MessageBox(wnd,strMsg,"公司信息重复,无法录入",MB_OK);
    return 0;
}

char strOneStuInfor[200]="";
sprintf(strOneStuInfor,"你录入的学生的公司信息如下:\n\r学号:%s\n\r姓名:%s\n\r公司代码:%s\n\r公司名:%s\n\r确认保存吗?",
    oneStu.SNo,oneStu.SName,oneCompany.CompanyNo,oneCompany.CompanyName);
while(true)
{
    if(MessageBox(wnd,strOneStuInfor,"确认保存",MB_YESNO)==IDYES)    //确认保存
    {
        StudentCompany tempCompany;
        tempCompany.isValid=1;
        strcpy(tempCompany.SNo,SNoInput);
        strcpy(tempCompany.CompanyNo,CompanyNoInput);
        sscanf(CompanyInput,"%s",&(tempCompany.Company));
        fpci=fopen("StuCompany.dat","ab+");
        fwrite(&tempCompany,sizeof(tempCompany),1,fpci);                    //保存到文件的末尾
        fclose(fpci);
        MessageBox(wnd,"保存成功!\n已录入一个学生一个公司的信息","保存成功",MB_OK | MB_ICONWARNING);
        break;
    }else if(MessageBox(wnd,"真的放弃吗?","确认放弃",MB_YESNO | MB_ICONQUESTION)==IDYES)
    {
        MessageBox(wnd,"已放弃保存,保存失败!","已放弃保存",MB_OK | MB_ICONWARNING);
        return 0;
    }
}

return 1;

}

/************************************************************/
/函数:int InputMultiStuSingleBasisInfo() /
/功能:录入一家公司多名学生信息 /
/参数:无 /
/输入:用户输入学号、公司代码 /
/输出:无 /
/备注:无 /
/
************************************************/
int InputMultiStuSingleBasisInfo()
{
return 1;
}

/************************************************************/
/函数:int InputSingleCourseOneClassAllStuBasisInfo() /
/功能:录入一家公司某班所有学生学生信息 /
/参数:无 /
/输入:用户输入公司代码、专业代码、年级、班级 /
/输出:无 /
/备注:无 /
/
************************************************/
int InputSingleCourseOneClassAllStuBasisInfo()
{
return 1;
}

/************************************************************/
/函数:void MainInterfaceOfInputStuCompany() /
/功能:学生公司信息录入管理主界面,根据用户的选择进行不同操作 /
/参数:无 /
/输入:用户输入所要进行的功能所对应的代码 /
/输出:无 /
/备注:无 /
/
************************************************/
void MainInterfaceOfInputStuCompany()
{
int key; //用户输入的功能号
while(TRUE)
{
cleardevice();
setcolor(RED);
setfont(48, 0, "黑体");
outtextxy(150, 10, "学生公司信息录入");
setfont(32, 0, "宋体");
setcolor(GREEN);
outtextxy(180, 110, "请选择功能:");
setcolor(BLACK);
outtextxy(100, 160, "1.录入单个学生单家公司信息");
outtextxy(100, 210, "2.录入某家公司某些学生信息");
outtextxy(100, 260, "3.录入某家公司某班所有学生信息");
outtextxy(100, 310, "0.返回上一层");
key=getch(); //读取该键
if(key=='1') //录入单个学生单家公司信息
{
InputSingleStuSingleCompanyInfor();
}else if(key=='2') //录入某家公司某些学生信息
{
return ;
}else if(key=='3') //录入某家公司某班所有学生信息
{
return ;
}else if(key=='0') //直接返回上一层功能模块
{
return;
}
}
}

SearchStuCompany.h
/头文件SearchStuCompany.h,处理学生的公司信息的查询/
/所有学生的基本信息均保存在文件StuBasIn.dat中/
/所有的公司基本信息数据均存储在CourInfo.dat文件中/

#include <stdio.h>
#include <string.h>
#include "CommonData.h"
#include <conio.h>
#include "graphics.h"
#include "Windows.h"

/************************************************************/
/函数:void ShowHeaderOfStuOneCompany() /
/功能:显示学生公司信息表头:学号、姓名、专业、年级、班级 /
/
、公司号、公司名 /
/参数:无 /
/输入:无 /
/输出:显示学生公司信息表头:学号、姓名、专业、年级、班级 /
/
、公司号、公司名 /
/备注:无 /
/
************************************************/
void ShowHeaderOfStuOneCompany()
{
cleardevice();
setcolor(RED);
setfont(24, 0, "黑体");
outtextxy(240, 10, "学生就业信息查询结果");
setfont(12, 0, "宋体");
setcolor(GREEN);
outtextxy(10, 60, "学号");
outtextxy(80, 60, "姓名");
outtextxy(150, 60, "专业");
outtextxy(220, 60, "年级");
outtextxy(270, 60, "班级");
outtextxy(320, 60, "公司号");
outtextxy(370, 60, "公司名");

}

/************************************************************/
/函数:void ShowOneStuOneCompany(int nCount,char SNo[], /
/
char CompanyNo[]) /
/功能:显示一个学生一家公司的完整公司信息:学号、姓名、 /
/
专业、年级、班级、公司号、公司名 /
/参数:nCount第几个,SNo学号,CompanyNo公司代码 /
/输入:无 /
/输出:该学号的该家公司的完公司信息 /
/备注:无 /
/
************************************************/
void ShowOneStuOneCompany(int nCount,char SNo[],char CompanyNo[])
{
StudentBasisInfor sbif,oneStu;
SpecialityInfor si,oneSpec;
CompanyInfor ci,oneCompany;
int isExist;
FILE* fp;
isExist=false;
//先查找学生基本信息,暂存到sbif中
fp=fopen("StuBasIn.dat","rb");
while(!feof(fp))
{
int length=fread(&oneStu,sizeof(StudentBasisInfor),1,fp);
if(length==0)
break;
if(strcmp(oneStu.SNo,SNo)==0)
{
isExist=true;
break;
}
}
fclose(fp);
if(isExist)
sbif=oneStu;
else
{
strcpy(sbif.SNo,SNo);
strcpy(sbif.SName,"???");
strcpy(sbif.SSpecialityCode,"???");
sbif.SGrade=0;
sbif.SClass=0;
}
//再查找专业信息,暂存到si中
isExist=false;
fp=fopen("SpecInfo.dat","rb");
while(!feof(fp))
{
int length=fread(&oneSpec,sizeof(oneSpec),1,fp);
if(length==0)
break;
if(strcmp(oneSpec.SpecialityCode,sbif.SSpecialityCode)==0) //专业代码已存在
{
isExist=true;
break;
}
}
fclose(fp);
if(isExist)
{
si=oneSpec;
}else
{
strcmp(si.SpecialityCode,"???");
strcmp(si.SpecialityAliasName,"???");
}
//再查找公司信息
isExist=false;
fp=fopen("CompaInfo.dat","rb");
while(!feof(fp))
{
int length=fread(&oneCompany,sizeof(oneCompany),1,fp);
if(length==0)
break;
if(strcmp(oneCompany.CompanyNo,CompanyNo)==0) //课程代码已存在
{
isExist=true;
break;
}
}
fclose(fp);
if(isExist)
{
ci=oneCompany;
}else
{
strcmp(ci.CompanyNo,CompanyNo);
strcmp(ci.CompanyName,"???");

}
setcolor(BLACK);
outtextxy(10, nCount*20+80, sbif.SNo);
outtextxy(80, nCount*20+80, sbif.SName);
outtextxy(150, nCount*20+80, si.SpecialityAliasName);
char str[100];
sprintf(str,"%d",sbif.SGrade);
outtextxy(220, nCount*20+80, str);
sprintf(str,"%d",sbif.SClass);
outtextxy(270, nCount*20+80, str);
outtextxy(320, nCount*20+80, ci.CompanyNo);
outtextxy(370, nCount*20+80, ci.CompanyName);

}

/********************************************************/
/函数:int SearchStuCompanyBySNO() /
/功能:按学号查询该生的所有公司的信息 /
/参数:无 /
/输入:用户输入学号 /
/输出:该学号的所有的公司的信息 /
/备注:无 /
/
************************************************/
int SearchStuCompanyBySNO()
{
HWND wnd = GetHWnd();
StudentCompany oneCompany;
char SNoInput[12]; //用户输入的11位数字字符的学生学号
int len;
int isExist;
int nCount=0; //当前正显示第几个学生的公司信息
FILE fpci; //学生公司信息文件指针
if((fpci=fopen("StuCompany.dat","rb"))==NULL) //如果公司信息文件不存在,则新建之
{
fpci=fopen("StuCompany.dat","wb+");
fclose(fpci);
}else
fclose(fpci);
InputBox(SNoInput,12,"请输入11位学生学号");
len=strlen(SNoInput);
while(len!=11)
{
MessageBox(wnd,"学号只能为11位!\n请重新输入","学号错误",MB_OK | MB_ICONERROR);
InputBox(SNoInput,12,"请输入11位学生学号");
len=strlen(SNoInput);
}
ShowHeaderOfStuOneCompany();
fpci=fopen("StuCompany.dat","rb");
isExist=false;
while(!feof(fpci))
{
int length=fread(&oneCompany,sizeof(oneCompany),1,fpci);
if(length==0) break;
if(strcmp(oneCompany.SNo,SNoInput)==0)
{
isExist=true;
ShowOneStuOneCompany(nCount,oneCompany.SNo,oneCompany.CompanyNo);//oneCompany.Company);
nCount++;
}
}
fclose(fpci);
setcolor(BLUE);
outtextxy(280, nCount
20+80, "按任意键继续……");
getch();
return 1;
}
/********
/
/函数:int SearchStuCompanyBySName() /
/功能:按学生姓名查询该生的所有公司的信息 /
/参数:无 /
/输入:用户输入姓名 /
/输出:该姓名的学生的所有的公司的信息 /
/备注:无 /
/
/
int SearchStuCompanyBySName()
{
return 1;
}
//
/函数:int SearchStuCompanyByCompanyNo() /
/功能:按公司号查询该公司的所有公司的信息 /
/参数:无 /
/输入:用户输入公司号 /
/输出:该公司号的所有公司的信息 /
/备注:无 /
/
/
int SearchStuCompanyByCompanyNo()
{
return 1;
}
/
/
/函数:int SearchStuCompanyByClass() /
/功能:按班级查询该班级的所有学生的所有公司的信息 /
/参数:无 /
/输入:用户输入专业代码、年级、班级 /
/输出:该班级的所有学生的所有公司的信息 /
/备注:无 /
/
/
int SearchStuCompanyByClass()
{
return 1;
}
//
/函数:int SearchStuCompanyByClass() /
/功能:按班级查询该班级的所有学生的所有公司的信息 /
/参数:无 /
/输入:用户输入专业代码、年级、班级 /
/输出:该班级的所有学生的所有公司的信息 /
/备注:无 /
/
/
int SearchStuCompanyByCombinationConditions()
{
return 1;
}
/
/
/函数:void MainInterfaceOfSearchStuCompany() /
/功能:学生就业信息查询管理主界面,根据用户的选择进行不同操作 /
/参数:无 /
/输入:用户输入所要进行的功能所对应的代码 /
/输出:无 /
/备注:无 /
/
/
void MainInterfaceOfSearchStuCompany()
{
int key; //用户输入的功能号
while(TRUE)
{
cleardevice();
setcolor(RED);
setfont(48, 0, "黑体");
outtextxy(150, 10, "学生就业信息录入");
setfont(32, 0, "宋体");
setcolor(GREEN);
outtextxy(180, 110, "请选择功能:");
setcolor(BLACK);
outtextxy(100, 160, "1.按学号查询");
outtextxy(100, 210, "2.按姓名查询");
outtextxy(100, 260, "3.按公司号查询");
outtextxy(100, 310, "4.按班级查询");
outtextxy(100, 360, "5.按组合条件查询");
outtextxy(100, 410, "0.返回上一层");
key=getch(); //读取该键
if(key=='1') //按学号查询
{
SearchStuCompanyBySNO();
}else if(key=='2') //按姓名查询
{
SearchStuCompanyBySName();
}else if(key=='3') //按公司号查询
{
SearchStuCompanyByCompanyNo();
}else if(key=='4') //按班级查询
{
SearchStuCompanyByClass();
}else if(key=='5') //按组合条件查询
{
SearchStuCompanyByCombinationConditions();
}else if(key=='0') //返回到上一层功能
{
return;
}
}
}

StuBasisInfo.h
/头文件StuBasisInfo.h,处理学生基本信息管理功能,包括学生基本信息的录入、/
/删除、修改和查询,所有学生的基本信息均保存在文件StuBasIn.dat中/
#include <stdio.h>
#include <string.h>
#include "CommonData.h"
#include <conio.h>
#include "graphics.h"

//
/函数:void InputSpecialityInfor() /
/功能:录入一个专业信息 /
/参数:无 /
/输入:用户输入对应专业信息 /
/输出:无 /
/备注:无 /
/
*/
int InputSpecialityInfor()
{
HWND wnd = GetHWnd();
SpecialityInfor oneSpec; //专业信息结构体变量
char specCodeInput[7]; //输入专业代码
char SpecialityNameInput[51]; //输入专业名称
char SpecialityAliasNameInput[21]; //输入专业别名,简称,不超过20个字符
char SpecialityIntruduceInput[501]; //输入专业介绍,不超过500字符
int len;
int isExist; //是否存在
FILE *fp;
if((fp=fopen("SpecInfo.dat","rb"))==NULL) //专业信息文件不存在
{
fp=fopen("SpecInfo.dat","wb+"); //新建之
fclose(fp);
}else
fclose(fp);
InputBox(specCodeInput,7,"请输入6位专业代码");
len=strlen(specCodeInput);
while(len!=6)
{
MessageBox(wnd,"专业代码只能为6位!\n请重新输入","专业代码错误",MB_OK | MB_ICONWARNING);
InputBox(specCodeInput,7,"请输入6位专业代码");
len=strlen(specCodeInput);
}
isExist=false;
fp=fopen("SpecInfo.dat","rb"); //重新打开专业信息文件
while(!feof(fp))
{
int length=fread(&oneSpec,sizeof(oneSpec),1,fp);
if(length==0)
break;
if(strcmp(oneSpec.SpecialityCode,specCodeInput)==0) //专业代码已存在
{
isExist=true;
break;
}
}
fclose(fp);
if(isExist) //如果专业代码已存在,提示错误,直接返回
{
char strMsg[100];
sprintf(strMsg,"专业代码%s(%s)已存在,请查正后再录入。\n录入专业失败!",
oneSpec.SpecialityCode,oneSpec.SpecialityName);
MessageBox(wnd,strMsg,"专业代码重复,添加失败",MB_OK | MB_ICONWARNING);
return 0;
}
InputBox(SpecialityNameInput,51,"请输入完整的专业名称,如:\n计算机科学与技术");
len=strlen(SpecialityNameInput);
while(len<=0)
{
MessageBox(wnd,"专业名称不能为空!\n请重新输入","专业名称错误",MB_OK | MB_ICONWARNING);
InputBox(SpecialityNameInput,51,"请输入完整的专业名称,如:\n计算机科学与技术");
len=strlen(SpecialityNameInput);
}
InputBox(SpecialityAliasNameInput,21,"请输入专业别名(简称),如:\n计算机");
len=strlen(SpecialityAliasNameInput);
while(len<=0)
{
MessageBox(wnd,"专业别名不能为空!\n请重新输入","专业别名错误",MB_OK | MB_ICONWARNING);
InputBox(SpecialityAliasNameInput,21,"请输入专业别名(简称),如:\n计算机");
len=strlen(SpecialityAliasNameInput);
}
InputBox(SpecialityIntruduceInput,501,"请输入专业介绍\n500字以内");
len=strlen(SpecialityIntruduceInput);
while(len<=0)
{
MessageBox(wnd,"专业介绍不能为空!\n请重新输入","专业介绍错误",MB_OK | MB_ICONWARNING);
InputBox(SpecialityIntruduceInput,501,"请输入专业介绍\n500字以内");
len=strlen(SpecialityIntruduceInput);
}while(len<=0);
strcpy(oneSpec.SpecialityCode,specCodeInput);
strcpy(oneSpec.SpecialityName,SpecialityNameInput);
strcpy(oneSpec.SpecialityAliasName,SpecialityAliasNameInput);
strcpy(oneSpec.SpecialityIntruduce,SpecialityIntruduceInput);
fp=fopen("SpecInfo.dat","ab+");
fwrite(&oneSpec,sizeof(oneSpec),1,fp);
fclose(fp);
MessageBox(wnd,"增加一个专业成功","专业添加成功",MB_OK);
return 1;
}
/************************************************************/
/*函数:void InputStuBasisInfo() */
/*功能:录入一个学生基本信息 */
/*参数:无 */
/*输入:用户输入对应的学生基本信息 */
/*输出:无 */
/*备注:无 */
/************************************************************/
int InputStuBasisInfo()
{
HWND wnd = GetHWnd();
StudentBasisInfor oneStu;
SpecialityInfor oneSpec; //专业信息结构体变量
char SNoInput[12]; //输入的11位数字字符的学生学号
char SNameInput[21]; //输入的学生姓名,不超过20个字符,一汉字占两个字符
char SGenderInput[2]; //输入的学生性别:M或m表示男,f或F表示女,别的字符非法
char SSpecialityCodeInput[7]; //输入的6位数字学生专业代码
char SGradeInput[5]; //输入的学生年级代码
char SClassInput[3]; //输入的学生班级代码
int len; //用户输入的字符长度
int isExist; //是否存在
int isValid; //输入是否合法
FILE *fp;
if((fp=fopen("SpecInfo.dat","rb"))==NULL) //专业信息文件不存在,无法录入学生信息
{
MessageBox(wnd,"对不起,无专业信息\n请先增加专业","录入学生失败",MB_OK);
return 0;
}
fclose(fp);
if((fp=fopen("StuBasIn.dat","rb"))==NULL) //学生基本信息文件不存在
{
fp=fopen("StuBasIn.dat","wb+"); //新建之
fclose(fp);
}else
fclose(fp);
InputBox(SNoInput,12,"请输入11位学生学号");
len=strlen(SNoInput);
while(len!=11)
{
MessageBox(wnd,"学号只能为11位!\n请重新输入","学号错误",MB_OK | MB_ICONWARNING);
InputBox(SNoInput,12,"请输入11位学生学号");
len=strlen(SNoInput);
}
isExist=false;
fp=fopen("StuBasIn.dat","rb"); //重新打开学生基本信息文件
while(!feof(fp))
{
int length=fread(&oneStu,sizeof(StudentBasisInfor),1,fp);
if(length==0)
break;
if(strcmp(oneStu.SNo,SNoInput)==0) //该学号已存在
{
isExist=true;
break;
}
}
fclose(fp);
if(isExist) //如果该学号已存在,提示错误,直接返回
{
char strMsg[100];
sprintf(strMsg,"该学号学生%s(%s)已存在,请查正后再录入。\n录入学生失败!",
oneStu.SNo,oneStu.SName);
MessageBox(wnd,strMsg,"学号重复,添加失败",MB_OK | MB_ICONWARNING);
return 0;
}
InputBox(SNameInput,21,"请输入学生姓名");
len=strlen(SNameInput);
while(len<=0)
{
MessageBox(wnd,"姓名不能为空!\n请重新输入","姓名错误",MB_OK | MB_ICONWARNING);
InputBox(SNameInput,21,"请输入学生姓名");
len=strlen(SNameInput);
}
InputBox(SGenderInput,2,"请输入学生性别(M男,F女):");
len=strlen(SGenderInput);
while(len!=1 || SGenderInput[0]!='M' && SGenderInput[0]!='F')
{
MessageBox(wnd,"性别只能是M或F!\n请重新输入","性别错误",MB_OK | MB_ICONWARNING);
InputBox(SGenderInput,2,"请输入学生性别(M男,F女):");
len=strlen(SGenderInput);
}
char strAllSpecs[10000]="请输入学生专业代码(只能是以下代码):\n\r"; //用来存放从专业信息文件中读取的所有的专业代码及名称
fp=fopen("SpecInfo.dat","rb");
while(!feof(fp))
{
int length=fread(&oneSpec,sizeof(oneSpec),1,fp);
if(length==0)
break;
strcat(strAllSpecs,oneSpec.SpecialityCode);
strcat(strAllSpecs," (");
strcat(strAllSpecs,oneSpec.SpecialityName);
strcat(strAllSpecs,")\n\r");
}
fclose(fp);
do
{
InputBox(SSpecialityCodeInput,7,strAllSpecs);
len=strlen(SSpecialityCodeInput);
while(len!=6)
{
MessageBox(wnd,"专业代码只能为6位!\n请重新输入","专业代码错误",MB_OK | MB_ICONWARNING);
InputBox(SSpecialityCodeInput,7,strAllSpecs);
len=strlen(SSpecialityCodeInput);
}
isExist=false; //用户输入的专业代码是否存在
fp=fopen("SpecInfo.dat","rb");
while(!feof(fp))
{
int length=fread(&oneSpec,sizeof(oneSpec),1,fp);
if(length==0)
break;
if(strcmp(oneSpec.SpecialityCode,SSpecialityCodeInput)==0)
{
isExist=true;
break;
}
}
fclose(fp);
if(!isExist) //如果用户输入的专业代码不存在
{
char strSpecCode[100]="";
sprintf(strSpecCode,"对不起,专业代码%s不存在!\n你要重新输入专业代码吗?",
SSpecialityCodeInput);
if(MessageBox(wnd,strSpecCode,"专业代码不存在",
MB_YESNO | MB_ICONINFORMATION)==IDNO) //如果用户不想重新输入专业代码,直接返回
{
MessageBox(wnd,"录入学生基本信息失败!","录入学生基本信息失败",MB_OK);
return 0;
}
}
}while(!isExist);
do{
isValid=true;
InputBox(SGradeInput,5,"请输入年级(四位数,如:2015)");
if(strlen(SGradeInput)<4)
{
MessageBox(wnd,"输入年级只能是4位整数,如2015\n请重新输入","输入年级错误",MB_OK);
isValid=false;
continue;
}
int i=0;
while(SGradeInput[i]!='\0')
{
if(SGradeInput[i]<'0' || SGradeInput[i]>'9')
{
isValid=false;
MessageBox(wnd,"输入年级只能是4位整数,如2015\n请重新输入","输入年级错误",MB_OK);
break;
}
i++;
}
}while(!isValid);
do{
isValid=true;
InputBox(SClassInput,5,"请输入班级(1-2位整数,如:2)");
if(strlen(SClassInput)<1)
{
MessageBox(wnd,"输入班级只能是1或2位整数,如2\n请重新输入","输入班级错误",MB_OK);
isValid=false;
continue;
}
int i=0;
while(SClassInput[i]!='\0')
{
if(SClassInput[i]<'0' || SClassInput[i]>'9')
{
isValid=false;
MessageBox(wnd,"输入班级只能是1或2位整数,如2\n请重新输入","输入班级错误",MB_OK);
break;
}
i++;
}
}while(!isValid);
char strOneStuInfor[200]="";
sprintf(strOneStuInfor,"你录入的学生信息如下:\n\r学号:%s\n\r姓名:%s\n\r性别:%s\n\r专业:%s\n\r年级:%s\n\r班级:%s\n\r确认保存吗?",
SNoInput,SNameInput,SGenderInput,SSpecialityCodeInput,SGradeInput,SClassInput);
while(true)
{
if(MessageBox(wnd,strOneStuInfor,"确认保存",MB_YESNO)==IDYES) //确认保存
{
StudentBasisInfor tempStu;
tempStu.isValid=1;
strcpy(tempStu.SNo,SNoInput);
strcpy(tempStu.SName,SNameInput);
tempStu.SGender=SGenderInput[0];
strcpy(tempStu.SSpecialityCode,SSpecialityCodeInput);
sscanf(SGradeInput,"%d",&(tempStu.SGrade));
sscanf(SClassInput,"%d",&(tempStu.SClass));
fp=fopen("StuBasIn.dat","ab+");
fwrite(&tempStu,sizeof(tempStu),1,fp); //保存到文件的末尾
fclose(fp);
MessageBox(wnd,"保存成功!\n已录入一个学生","保存成功",MB_OK | MB_ICONWARNING);
break;
}else if(MessageBox(wnd,"真的放弃吗?","确认放弃",MB_YESNO | MB_ICONQUESTION)==IDYES)
{
MessageBox(wnd,"已放弃保存,保存失败!","已放弃保存",MB_OK | MB_ICONWARNING);
return 0;
}
}
return 1;
}
/
/
/函数:void MainInterfaceOfStuBasisInfo() /
/功能:学生基本信息管理主界面,根据用户的选择进行不同操作 /
/参数:无 /
/输入:用户输入所要进行的功能所对应的代码 /
/输出:无 /
/备注:无 /
/
*/
void MainInterfaceOfStuBasisInfo()
{
int key; //用户输入的功能号
while(TRUE)
{
cleardevice();
setcolor(RED);
setfont(48, 0, "黑体");
outtextxy(150, 10, "学生基本信息管理");
setfont(32, 0, "宋体");
setcolor(GREEN);
outtextxy(180, 110, "请选择功能:");
setcolor(BLACK);
outtextxy(200, 160, "1.录入");
outtextxy(200, 210, "2.删除");
outtextxy(200, 260, "3.查询");
outtextxy(200, 310, "4.修改");
outtextxy(200, 360, "5.增加专业");
outtextxy(200, 410, "0.返回上一层");
key=getch(); //读取该键
if(key=='1') //录入学生基本信息
{
InputStuBasisInfo();
}
else if(key=='2') //删除学生基本信息
{
return ;
}else if(key=='3') //查询学生基本信息
{
return ;
}else if(key=='4') //修改学生基本信息
{
return ;
}else if(key=='5') //专业信息维护
{
InputSpecialityInfor();
}else if(key=='0') //如果是'0',表示退出学生基本信息管理功能
{
return;
}
}
}

StuCompManage.h
/头文件StuCompManage.h,处理学生的公司信息的录入、删除、修改和查询,/
/所有的公司基本信息数据均存储在CompanyInfo.dat文件中/

#include <stdio.h>
#include <string.h>
#include "CommonData.h"
#include <conio.h>
#include "graphics.h"
#include "InputStuCompany.h"
#include "SearchStuCompany.h"

/************************************************************/
/函数:void InputCompanyInfor() /
/功能:录入一个公司信息 /
/参数:无 /
/输入:用户输入对应公司信息 /
/输出:无 /
/备注:无 /
/
************************************************/
int InputCompanyInfor()
{
HWND wnd = GetHWnd();
CompanyInfor oneCompany;
char CompanyNoInput[7]; //公司代码,固定为6个数字字符
char CompanyNameInput[51]; //公司名称,不超过50字符
char CompanyHistoryInput[1001]; //公司历史,不超过1000字符
char CompanyProjectInput[1001]; //公司项目,不超过1000字符
char PersonnelInforInput[1001]; //人事信息,不超过1000字符
int len;
int isExist; //是否存在
FILE *fp;
if((fp=fopen("CompanyInfo.dat","rb"))==NULL) //公司信息文件不存在
{
fp=fopen("CompaInfo.dat","wb+"); //新建之
fclose(fp);
}else
fclose(fp);
InputBox(CompanyNoInput,7,"请输入6位公司代码");
len=strlen(CompanyNoInput);
while(len!=6)
{
MessageBox(wnd,"公司代码只能为6位!\n请重新输入","公司代码错误",MB_OK | MB_ICONWARNING);
InputBox(CompanyNoInput,7,"请输入6位公司代码");
len=strlen(CompanyNoInput);
}
isExist=false;
fp=fopen("CompaInfo.dat","rb"); //重新打开专业信息文件
while(!feof(fp))
{
int length=fread(&oneCompany,sizeof(oneCompany),1,fp);
if(length==0)
break;
if(strcmp(oneCompany.CompanyNo,CompanyNoInput)==0) //公司代码已存在
{
isExist=true;
break;
}
}
fclose(fp);
if(isExist) //如果公司代码已存在,提示错误,直接返回
{
char strMsg[200];
sprintf(strMsg,"公司代码%s (%s) 已存在,请查正后再录入。\n录入公司信息失败!",
oneCompany.CompanyNo,oneCompany.CompanyName);
MessageBox(wnd,strMsg,"公司代码重复,添加失败",MB_OK | MB_ICONWARNING);
return 0;
}
InputBox(CompanyNameInput,51,"请输入完整的公司名称,如:\n字节跳动");
len=strlen(CompanyNameInput);
while(len<=0)
{
MessageBox(wnd,"公司名称不能为空!\n请重新输入","公司名称错误",MB_OK | MB_ICONWARNING);
InputBox(CompanyNameInput,51,"请输入完整的公司名称,如:\n字节跳动");
len=strlen(CompanyNameInput);
}
InputBox(CompanyHistoryInput,1001,"请输入公司历史,如:");
len=strlen(CompanyHistoryInput);
while(len<=0)
{
MessageBox(wnd,"公司历史不能为空!\n请重新输入","公司历史错误",MB_OK | MB_ICONWARNING);
InputBox(CompanyHistoryInput,1001,"请输入公司历史,如:");
len=strlen(CompanyHistoryInput);
}
InputBox(CompanyProjectInput,1001,"请输入公司项目,如:");
len=strlen(CompanyProjectInput);
while(len<=0)
{
MessageBox(wnd,"公司项目不能为空!\n请重新输入","公司项目错误",MB_OK | MB_ICONWARNING);
InputBox(CompanyProjectInput,4,"请输入公司项目,如:");
len=strlen(CompanyProjectInput);
}
InputBox(PersonnelInforInput,1001,"请输入人事信息,如:");
len=strlen(PersonnelInforInput);
while(len<=0)
{
MessageBox(wnd,"人事信息不能为空!\n请重新输入","人事信息错误",MB_OK | MB_ICONWARNING);
InputBox(PersonnelInforInput,4,"请输入人事信息,如:");
len=strlen(PersonnelInforInput);
}
strcpy(oneCompany.CompanyNo,CompanyNoInput);
strcpy(oneCompany.CompanyName,CompanyNameInput);
sscanf(CompanyHistoryInput,"%s",&(oneCompany.CompanyHistory));
sscanf(CompanyProjectInput,"%s",&(oneCompany.CompanyProject));
sscanf(PersonnelInforInput,"%s",&(oneCompany.PersonnelInfor));
fp=fopen("CompaInfo.dat","ab+");
fwrite(&oneCompany,sizeof(oneCompany),1,fp);
fclose(fp);
MessageBox(wnd,"增加一家公司成功","公司添加成功",MB_OK);
return 1;
}

/************************************************************/
/函数:int DeleteSingleStuSingleCompanyInfor() /
/功能:删除单个学生单家公司信息 /
/参数:无 /
/输入:用户输入学号、公司代码 /
/输出:无 /
/备注:无 /
/
************************************************/
int DeleteSingleStuSingleCompanyInfor()
{
HWND wnd = GetHWnd();
StudentCompany oneCompany;
char SNoInput[12]; //用户输入的11位数字字符的学生学号
char CompanyNoInput[7]; //用户公司代码,固定为6个数字字符
int len;
int isExist;
char CompanyeNoInput;
FILE *fpci,*fptemp; //学生公司信息文件、临时公司信息文件指针
if((fpci=fopen("StuCompany.dat","rb"))==NULL) //如果公司信息文件不存在,则新建之
{
fpci=fopen("StuCompany.dat","wb+");
fclose(fpci);
}else
fclose(fpci);
InputBox(SNoInput,12,"请输入11位学生学号");
len=strlen(SNoInput);
while(len!=11)
{
MessageBox(wnd,"学号只能为11位!\n请重新输入","学号错误",MB_OK | MB_ICONERROR);
InputBox(SNoInput,12,"请输入11位学生学号");
len=strlen(SNoInput);
}
InputBox(CompanyNoInput,7,"请输入6位公司代码");
len=strlen(CompanyNoInput);
while(len!=6)
{
MessageBox(wnd,"公司代码只能为6位!\n请重新输入","公司代码错误",MB_OK | MB_ICONWARNING);
InputBox(CompanyNoInput,7,"请输入6位公司代码");
len=strlen(CompanyNoInput);
}
fpci=fopen("StuCompany.dat","rb");
isExist=false;
while(!feof(fpci))
{
int length=fread(&oneCompany,sizeof(oneCompany),1,fpci);
if(length==0) break;
if(strcmp(oneCompany.SNo,SNoInput)==0 && //如果该名学生该家公司信息已经存在
strcmp(oneCompany.CompanyNo,CompanyNoInput)==0)
{
isExist=true;
break;
}
}
fclose(fpci);
if(!isExist)
{
char strMsg[200];
sprintf(strMsg,"学生%s的%公司信息不存在。无法删除\n删除公司失败!",
oneCompany.SNo,oneCompany.CompanyNo,oneCompany.Company);
MessageBox(wnd,strMsg,"公司不存在,删除失败",MB_OK);
return 0;
}
char strOneStuInfor[200]="";
sprintf(strOneStuInfor,"你要删除的学生成绩如下:\n\r学号:%s\n\r公司代码:%.1f\n\r确认删除吗?",
oneCompany.SNo,oneCompany.CompanyNo,oneCompany.Company);
if(MessageBox(wnd,strOneStuInfor,"请确认删除",MB_YESNO)==IDYES) //确认删除
{
if(MessageBox(wnd,"真的删除吗?\n删除后无法恢复","确认删除",
MB_YESNO | MB_ICONQUESTION)==IDYES)
{
StudentCompany tempCompany;
fpci=fopen("StuCompany.dat","rb");
fptemp=fopen("TempStuCompany.dat","wb+");
while(!feof(fpci))
{ //将成绩过滤掉要删除的数据,保存到临时文件中去
int length=fread(&tempCompany,sizeof(oneCompany),1,fpci);
if(length==0) break;
if(strcmp(tempCompany.SNo,SNoInput)!=0 || strcmp(tempCompany.CompanyNo,CompanyNoInput)!=0)
fwrite(&tempCompany,sizeof(tempCompany),1,fptemp);
}
fclose(fpci);
fclose(fptemp);
Sleep(20);
remove("StuCompany.dat"); //删除老文件
rename("TempStuCompany.dat","StuCompany.dat"); //将临时文件改名成绩文件
MessageBox(wnd,"删除成功!\n已删除一个学生一家公司信息","删除成功",MB_OK | MB_ICONWARNING);
return 1;
}
}
return 0;
}

/************************************************************/
/函数:int ModifySingleStuSingleCompanyInfor() /
/功能:修改单个学生单家公司信息 /
/参数:无 /
/输入:用户输入学号、公司代码 /
/输出:无 /
/备注:无 /
/
************************************************/
int ModifySingleStuSingleCompanyInfor()
{
HWND wnd = GetHWnd();
StudentCompany oneCompany;
char SNoInput[12]; //用户输入的11位数字字符的学生学号
char CompanyNoInput[7]; //用户公司代码,固定为6个数字字符

int        len;
int        isExist;
char    CompanyInput;
FILE    *fpci;                //学生公司信息文件指针

InputBox(SNoInput,12,"请输入11位学生学号");
len=strlen(SNoInput);
while(len!=11)
{
    MessageBox(wnd,"学号只能为11位!\n请重新输入","学号错误",MB_OK | MB_ICONERROR);
    InputBox(SNoInput,12,"请输入11位学生学号");
    len=strlen(SNoInput);
}
InputBox(CompanyNoInput,7,"请输入6位公司代码");
len=strlen(CompanyNoInput);
while(len!=6)
{
    MessageBox(wnd,"公司代码只能为6位!\n请重新输入","公司代码错误",MB_OK | MB_ICONWARNING);
    InputBox(CompanyNoInput,7,"请输入6位公司代码");
    len=strlen(CompanyNoInput);
}
if((fpci=fopen("StuCompany.dat","rb"))==NULL)    //如果公司信息文件不存在,则新建之
{
    fpci=fopen("StuCompany.dat","wb+");
    fclose(fpci);
}else
    fclose(fpci);
fpci=fopen("StuCompany.dat","rb+");//读写方式打开公司信息文件
isExist=false;
while(!feof(fpci))
{
    int length=fread(&oneCompany,sizeof(oneCompany),1,fpci);
    if(length==0)    break;
    if(strcmp(oneCompany.SNo,SNoInput)==0 &&    //如果名学生该家公司信息存在,确认修改
        strcmp(oneCompany.CompanyNo,CompanyNoInput)==0)
    {
        isExist=true;
        InputBox(CompanyNoInput,1001,"请输入新信息,如:");
        len=strlen(CompanyNoInput);
        while(len<=0)
        {
            MessageBox(wnd,"信息不能为空!\n请重新输入","信息错误",MB_OK | MB_ICONWARNING);
            InputBox(CompanyNoInput,1001,"请输入新信息,如:");
            len=strlen(CompanyNoInput);
        }
        char strOneStuInfor[200]="";
        sprintf(strOneStuInfor,"学号:%s\n\r公司代码:%s\n\r原信息:%.1f\n\r修改后信息:%s\n\r确认修改吗?",
            oneCompany.SNo,oneCompany.CompanyNo,oneCompany.Company,CompanyInput);
        if(MessageBox(wnd,strOneStuInfor,"确认修改",MB_YESNO)==IDYES)    //确认保存
        {
            StudentCompany tempCompany;
            tempCompany.isValid=1;
            strcpy(tempCompany.SNo,SNoInput);
            strcpy(tempCompany.CompanyNo,CompanyNoInput);
            //strcpy(tempCompany.Company,CompanyNoInput);
            fseek(fpci,-sizeof(StudentCompany),SEEK_CUR);        //后退一个公司信息
            fwrite(&tempCompany,sizeof(tempCompany),1,fpci);    //将原信息覆盖,从而完成修改
            MessageBox(wnd,"修改成功!\n已修改一个学生一家公司信息","修改成功",
                MB_OK | MB_ICONWARNING);
        }else
            MessageBox(wnd,"修改未完成","修改失败",MB_OK | MB_ICONWARNING);
        break;
    }
}
fclose(fpci);

return 1;

}
/************************************************************/
/函数:void MainInterfaceOfStuCompManage() /
/功能:公司信息管理主界面,根据用户的选择进行不同操作 /
/参数:无 /
/输入:用户输入所要进行的功能所对应的代码 /
/输出:无 /
/备注:无 /
/
************************************************/
void MainInterfaceOfStuCompManage()
{
int key; //用户输入的功能号
while(TRUE)
{
cleardevice();
setcolor(RED);
setfont(48, 0, "黑体");
outtextxy(150, 10, "公司信息管理");
setfont(32, 0, "宋体");
setcolor(GREEN);
outtextxy(180, 110, "请选择功能:");
setcolor(BLACK);
outtextxy(200, 160, "1.录入公司信息");
outtextxy(200, 210, "2.删除公司信息");
outtextxy(200, 260, "3.查询公司信息");
outtextxy(200, 310, "4.修改公司信息");
outtextxy(200, 360, "5.增加公司信息");
outtextxy(200, 410, "0.返回上一层");
key=getch(); //读取该键
if(key=='1') //录入公司信息
{
InputCompanyInfor();
}
else if(key=='2') //删除公司信息
{
DeleteSingleStuSingleCompanyInfor();
}else if(key=='3') //查询公司信息
{
ShowHeaderOfStuOneCompany();
}else if(key=='4') //修改公司信息
{
ModifySingleStuSingleCompanyInfor();
}else if(key=='5') //增加公司信息
{
InputCompanyInfor();
}else if(key=='0') //如果是'0',表示退出公司基本信息管理功能
{
return;
}
}
}