用C语言开发小型数据库管理系统代码

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

#include
#include
typedef struct count{ /*保存记录条数结构体*/
char name[10];
int num;
}count;

typedef struct st{
char name[10];
long Number;
int Math;
int C;
int Amount;
}st;
st record[8];
count num[1];
char filename[10]={"0"};
char filename2[10]={"0"};
int Inputnum[8];

void MainMenu(){ /*主菜单*/
printf("\n\t\t\t\t* * * * * * * * * *\n");
printf("\t\t\t\t* 主菜单 *\n");
printf("\t\t\t\t* 1. 创建新文件 *\n");
printf("\t\t\t\t* 2. 添加记录 *\n");
printf("\t\t\t\t* 3. 删除记录 *\n");
printf("\t\t\t\t* 4. 排序 *\n");
printf("\t\t\t\t* 5. 查询记录 *\n");
printf("\t\t\t\t* 6. 退出 *\n");
printf("\t\t\t\t* * * * * * * * * *\n");
}

void DelMenu(){ /*删除菜单*/
printf("\n\t\t\t\t* * * * * * * * * * * *\n");
printf("\t\t\t\t* 删除菜单 *\n");
printf("\t\t\t\t* 1. 学号查询删除 *\n");
printf("\t\t\t\t* 2. 返回到上级菜单 *\n");
printf("\t\t\t\t* * * * * * * * * * * *\n");
}

void RankingMenu(){ /*排序菜单*/
printf("\n\t\t\t\t* * * * * * * * * * * *\n");
printf("\t\t\t\t* 排序菜单 *\n");
printf("\t\t\t\t* 1. 数学成绩排序 *\n");
printf("\t\t\t\t* 2. C语言成绩排序 *\n");
printf("\t\t\t\t* 3. 总分排序 *\n");
printf("\t\t\t\t* 4. 返回到上级菜单 *\n");
printf("\t\t\t\t* * * * * * * * * * * *\n");
}

void InquireMenu(){ /*查讯菜单*/
printf("\n\t\t\t\t* * * * * * * * * * * *\n");
printf("\t\t\t\t* 查讯菜单 *\n");
printf("\t\t\t\t* 1. 学号查讯 *\n");
printf("\t\t\t\t* 2. 姓名查讯 *\n");
printf("\t\t\t\t* 3. 数学成绩查讯 *\n");
printf("\t\t\t\t* 4. C语言成绩查讯 *\n");
printf("\t\t\t\t* 5. 总分查讯 *\n");
printf("\t\t\t\t* 6. 返回到上级菜单 *\n");
printf("\t\t\t\t* * * * * * * * * * * *\n");
}

char Inputfilename(){ /*输入文件名同时产生付本文件名*/
char str2[]={"B"};
printf("** 请输入文件名 ** : ");
scanf("%s",filename);
getchar();
strcpy(filename2,filename);
strcat(filename2,str2);
}

FILE *readfile(){ /*读取文档*/
FILE *fp1;
if((fp1=fopen(filename,"rb"))==NULL)
{printf("\n文件读取错误!!\n");
fclose(fp1);
}
return(fp1);
}

FILE *foundfile(){ /*新建文档*/
FILE *fp1;
if((fp1=fopen(filename,"wb"))==NULL)
{printf("\n文件创建错误!!\n");
fclose(fp1);
}
return(fp1);
}

FILE *

savefile(){ /*追加文档*/
FILE *fp1;
if((fp1=fopen(filename,"ab"))==NULL)
{printf("\n文件追加错误!!\n");
fclose(fp1);
}
return(fp1);
}

int InputSave(){ /*添加数据 */
int i=0,j;
char ch='y';
while(ch!='w')
{i=i+1;
printf("\n** 请输入姓名(字符型) ** :");
scanf("%s",record[i].name);
Loop1: printf("\n** 请输入学号(长整型) ** :");
scanf("%ld",&record[i].Number);
if(i!=1)
for(j=1;jif(record[i].Number==record[j].Number)
{printf("\n\t警告! 输入了二个同样的学号! 第%d条和第%d学号相同!\n",i,j);
printf("\n\t请重新输入!\n");
goto Loop1;
}
Loop2: printf("\n** 请输入数学成绩(整型) ** :");
scanf("%d",&record[i].Math);
if(record[i].Math>100||record[i].Math<0)
{printf("\n\t输入的分数不服合实际要求! 请重新录入!\n");
goto Loop2;
}
Loop3: printf("\n** 请输入C语言成绩(整型) ** :");
scanf("%d",&record[i].C);
if(record[i].C>100||record[i].C<0)
{printf("\n\t输入的分数不服合实际要求! 请重新录入!\n");
goto Loop3;
}
record[i].Amount=record[i].Math+record[i].C;
printf(" \n'w'=结束录入 's'=重新录入此条记录 'n'=下一条 : ");
getchar(); /*吃掉上一个回车符*/
if((ch=getchar())=='s')
i=i-1;
}
return(i);
}

/*
void ReadComputer(int i,FILE *fp1){ (文本方式)数据写入机器
int j;
for(j=1;jfscanf(fp1,"%s,%ld,%d,%d,%d",record[j].name,&record[j].Number,&record[j].Math,&record[j].C,&record[j].Amount);
}

void SaveFile(int i,FILE *fp1){ (文本方式)数据写到文件中
int j;
for(j=1;jfprintf(fp1,"%s,%ld,%d,%d,%d",record[j].name,record[j].Number,record[j].Math,record[j].C,record[j].Amount);
}
*/

void ReadComputer2(int i,FILE *fp1){ /*(2方式)数据写入机器*/
int j;
for(j=1;jif((fread(&record[j],sizeof(struct st),1,fp1))!=1)
{printf("\n主文件数据读取错误! \n");
fclose(fp1);
}
}

void SaveFile2(int i,FILE *fp1){ /*(2方式)数据写到文件中*/
int j;
for(j=1;jif((fwrite(&record[j],sizeof(struct st),1,fp1))!=1)
{printf("\n主文件数据写入错误! \n");
fclose(fp1);
}
}
/* ************************************************************ *********************************************************** */
FILE *readfile2(){

/*读文件付本*/
FILE *fp1;
if((fp1=fopen(filename2,"rb"))==NULL)
{printf("\n付本文件读取错误!\n");
fclose(fp1);
}
return(fp1);
}

FILE *foundfile2(){ /*新建文件付本*/
FILE *fp1;
if((fp1=fopen(filename2,"wb"))==NULL)
{printf("\n付本文件创建错误!\n");
fclose(fp1);
}
return(fp1);
}

FILE *savefile2(){ /*追加文件付本*/
FILE *fp1;
if((fp1=fopen(filename2,"ab"))==NULL)
{printf("\n付本文件追加错误!\n");
fclose(fp1);
}
return(fp1);
}

/*
void Additive2(int i,FILE *fp1){ 数据与入付本文件(文本方式)
int j;
char str2={"0"};
if(strcmp(filenameF,str2)!=0)
strcpy(num[0].name,filenameF);
else
strcpy(num[0].name,filenameA);
num[0].num=i;

fprintf(fp1,"%s,%d",num[0].name,num[0].num);
}

int ReadComputer2(FILE *fp1){ 读出付本中的数据(文本方式)
int j,k;

fscanf(fp1,"%s,%d",num[0].name,&num[0].num);
k=num[0].num;
return(k);
}
*/

void Additive2Two(int i,FILE *fp1){ /*数据写入付本文件(二进制方式)*/
char str2[]={"0"};
if(strcmp(filename2,str2)!=0)
strcpy(num[0].name,filename2);
else
strcpy(num[0].name,filename2);
num[0].num=i;
if((fwrite(&num[0],sizeof(struct count),1,fp1))!=1)
{printf("\n付本文件数据写入错误! \n");
fclose(fp1);
}
}

int ReadComputer2Two(FILE *fp1){ /*读出付本中的数据(二进制方式)*/
int j;
if((fread(&num[0],sizeof(struct count),1,fp1))!=1)
{printf("\n付本文件数据读取错误! \n");
fclose(fp1);
}
j=num[0].num;
return(j);
}
/* ************************************************************ *********************************************************** */
void Num_inquire(){ /*学号查询*/
int num,j,time;
FILE *fp1,*fp2;
fp1=readfile(); /*读取文档*/
fp2=readfile2(); /*(开打方式'读'**'引用读文件名')读文件付本*/
time=ReadComputer2Two(fp2); /*读出付本中的数据(二进制方式)*/
ReadComputer2(time,fp1); /*(2方式)数据写入机器*/
fclose(fp1);fclose(fp2);
printf("输入学号:");
scanf("%ld",&num);
/*getchar();*/
for(j=1;j{if(record[j].Number==num)
printf("\nName:%-10s Num:%3ld Math:%3d C:%3d Amount:%3d\n",record[j].name,record[j].Number,record[j].Math

,record[j].C,record[j].Amount);
}
}

void Name_inquire(){ /*姓名查询*/
int j,time;
char Name[10];
FILE *fp1,*fp2;
fp1=readfile();
fp2=readfile2(); /*(开打方式'读'**'引用读文件名')读文件付本*/
time=ReadComputer2Two(fp2); /*读出付本中的数据(二进制方式)*/
ReadComputer2(time,fp1); /*(2方式)数据写入机器*/
fclose(fp1);fclose(fp2);
printf("输入姓名:");
scanf("%s",Name);
/*getchar();*/
for(j=1;j{if(strcmp(Name,record[j].name)==0)
printf("\nName:%-10s Num:%3ld Math:%3d C:%3d Amount:%3d\n",record[j].name,record[j].Number,record[j].Math,record[j].C,record[j].Amount);
}
}

void Math_inquire(){ /*数学查询*/
int Math,j,time;
FILE *fp1,*fp2;
fp1=readfile();
fp2=readfile2(); /*(开打方式'读'**'引用读文件名')读文件付本*/
time=ReadComputer2Two(fp2); /*读出付本中的数据(二进制方式)*/
ReadComputer2(time,fp1); /*(2方式)数据写入机器*/
fclose(fp1);fclose(fp2);
printf("输入数学成绩:");
scanf("%d",&Math);
/*getchar();*/
for(j=1;j{if(record[j].Math>=Math)
printf("\nName:%-10s Num:%3ld Math:%3d C:%3d Amount:%3d\n",record[j].name,record[j].Number,record[j].Math,record[j].C,record[j].Amount);
}
}

void C_inquire(){ /*C查询*/

int C,j,time;
FILE *fp1,*fp2;
fp1=readfile();
fp2=readfile2(); /*(开打方式'读'**'引用读文件名')读文件付本*/
time=ReadComputer2Two(fp2); /*读出付本中的数据(二进制方式)*/
ReadComputer2(time,fp1); /*(2方式)数据写入机器*/
fclose(fp1);fclose(fp2);
printf("输入C语言成绩:");
scanf("%d",&C);
/*getchar();*/
for(j=1;j{if(record[j].C>=C)
printf("\nName:%-10s Num:%3ld Math:%3d C:%3d Amount:%3d\n",record[j].name,record[j].Number,record[j].Math,record[j].C,record[j].Amount);
}

}

void Amount_inquire(){ /*总分查询*/

int Amount,j,time;
FILE *fp1,*fp2;
fp1=readfile();
fp2=readfile2(); /*(开打方式'读'**'引用读文件名')读文件付本*/
time=ReadComputer2Two(fp2); /*读出付本中的数据(二进制方式)*/


ReadComputer2(time,fp1); /*(2方式)数据写入机器*/
fclose(fp1);fclose(fp2);
printf("输入总分:");
scanf("%d",&Amount);
/*getchar();*/
for(j=1;j{if(record[j].Amount>=Amount)
printf("\nName:%-10s Num:%3ld Math:%3d C:%3d Amount:%3d\n",record[j].name,record[j].Number,record[j].Math,record[j].C,record[j].Amount);
}
}
/* ************************************************************ *********************************************************** */
void Num_inquire_Del(){ /*学号查询删除*/
char ch;
int num,j,k,time;
FILE *fp1,*fp2;
fp1=readfile(); /*读取文档*/
fp2=readfile2(); /*读文件付本*/
time=ReadComputer2Two(fp2); /*读出付本中的数据(二进制方式)*/
ReadComputer2(time,fp1); /*(2方式)数据写入机器*/
fclose(fp1);fclose(fp2);
printf("输入学号:");
scanf("%ld",&num);
getchar();
for(j=1;j<=time;j++)
if(record[j].Number==num)
{printf("\nName:%-10s Num:%3ld Math:%3d C:%3d Amount:%3d\n",record[j].name,record[j].Number,record[j].Math,record[j].C,record[j].Amount);
k=j;
}
printf("\n\t** 删除='y' 不删除='n' ** : ");
if((ch=getchar())=='y')
{
if(k==time)
time=time-1;
else for(j=k;j{record[j]=record[j+1];
time=time-1;
}
fp1=foundfile(); /*新建文档*/
SaveFile2(time,fp1); /*(2方式)数据写到文件中*/
fp2=foundfile2(); /*新建文件付本*/
Additive2Two(time,fp2); /*数据与入付本文件(二进制方式)*/
printf("\n删除成功! 目前共有%d条记录!\n",time);
fclose(fp1);fclose(fp2);
}
else printf("\n没有执行删除操作!\n");
}
/* ************************************************************ *********************************************************** */
void Math_ranking(int i){ /*数学排序函数*/
int j,k;
st time;
for(j=1;jfor(k=1;k<=i-j;k++)
if(record[k].Math>record[k+1].Math)
{time=record[k];record[k]=record[k+1];record[k+1]=time;}
printf("\n");
for(j=1;jprintf("\nName:%-10s Num:%3ld Math:%3d C:%3d Amount:%3d\n",record[j].name,record[j].Number,record[j].Math,record[j].C,record[j].Amount);
}

void C_ranking(int i){ /*C排序函数*/
int j,k;
st time;
for(j=1;jfor(k=1;k<=i-j;k++

)
if(record[k].C>record[k+1].C)
{time=record[k];record[k]=record[k+1];record[k+1]=time;}
printf("\n");
for(j=1;jprintf("\nName:%-10s Num:%3ld Math:%3d C:%3d Amount:%3d\n",record[j].name,record[j].Number,record[j].Math,record[j].C,record[j].Amount);
}

void Amount_ranking(int i){ /*总分排序函数*/
int j,k;
st time;
for(j=1;jfor(k=1;k<=i-j;k++)
if(record[k].Amount>record[k+1].Amount)
{time=record[k];record[k]=record[k+1];record[k+1]=time;}
printf("\n");
for(j=1;jprintf("\nName:%-10s Num:%3ld Math:%3d C:%3d Amount:%3d\n",record[j].name,record[j].Number,record[j].Math,record[j].C,record[j].Amount);
}
/* ************************************************************ *********************************************************** */
main(){
FILE *fp,*ffp;
int temp1=0,temp2=0,temp3;
char ch,location;
MainMenu();
location='1';
printf("\n请输入选项 1 - 6 (当前在主菜单):");
while((ch=getchar())!='0')
{if((ch=='6')&&(location=='1'))
{getchar();
printf("\n\n\t\t\t** 'Y'=续继 'n'=退出 **\n");
printf("\n\n\t\tINPUT:");
if((ch=getchar())=='n')
{printf("\n\n\t\t\t 谢谢您的使用!");
exit();
break;
}
else {MainMenu();location='1';
printf("\n请输入选项 1 - 6 (当前在主菜单):");
}
}
if((ch=='1')&&(location=='1'))
{
temp1=InputSave(); /*添加数据 */
getchar();
printf("\t\t** 'y'=保存 'n'=不保存 ** : ");
if((ch=getchar())=='y')
{Inputfilename(); /*输入文件名同时产生付本文件名*/
fp=foundfile(); /*新建文档*/
SaveFile2(temp1,fp); /*(2方式)数据写到文件中*/
fclose(fp);
ffp=foundfile2(); /*(开打方式'新建')新建文件付本*/
Additive2Two(temp1,ffp); /*新建付本文件数据(文本方式)*/
fclose(ffp);
printf("保存了%d条记录!\n",temp1);
}
else printf("\t 没有保存!\n");
temp1=0;temp2=0;
MainMenu();location='1';
printf("\n请输入选项 1 - 6 (当前在主菜单):");
continue;
}

if((ch=='2')&&(location=='1'))
{getchar();
printf("\n\t ** 'y'=使用当前文件名 'n'=输入新文件名 ** : ");

if((ch=getchar())=='y')
fp=savefile(); /*追加文档*/
else {Inputfilename(); /*输入文件名同时产生付本文件名*/
fp=savefile();
}
temp1=InputSave(); /*添加数据 */
temp3=temp1;
SaveFile2(temp1,fp); /*(2方式)数据写到文件中*/
fclose(fp);
ffp=readfile2(); /*读文件付本*/
temp2=ReadComputer2Two(ffp); /*读出付本中的数据(文本方式)*/
fclose(ffp);
temp1=temp1+temp2;
ffp=foundfile2(); /*新建文件付本*/
Additive2Two(temp1,ffp); /*新建付本文件数据(文本方式)*/
fclose(ffp);
printf("\n添加拉%d条数据!共保存%d条数据!\n",temp3,temp1);
temp1=0;temp2=0;
MainMenu();location='1';
printf("\n请输入选项 1 - 6 (当前在主菜单):");
continue;
}

if((ch=='3')&&(location=='1'))
{DelMenu();location='2';
printf("\n请输入选项 1 - 3 (当前在删除菜单):");
while((ch=getchar())!='0'){
if((ch=='1')&&(location=='2'))
{getchar();
printf("\n\t\t **现在位置在删除菜单 - 学号删除**\n");
printf("\n\t ** 'y'=使用当前文件名 'n'=输入新文件名 ** : ");
if((ch=getchar())=='y')
{} /*追加文档*/
else Inputfilename(); /*输入文件名同时产生付本文件名*/
Num_inquire_Del(); /*学号查询删除*/
DelMenu();location='2';
printf("\n请输入选项 1 - 3 (当前在删除菜单):");
continue;
}
if((ch=='2')&&(location=='2'))
{MainMenu();location='1';
printf("\n请输入选项 1 - 6 (当前在主菜单):");
break;
}
}
}

if((ch=='4')&&(location=='1'))
{RankingMenu();location='3';
printf("\n请输入选项 1 - 4 (当前在排序菜单):");
while((ch=getchar())!='0'){
if((ch=='1')&&(location=='3'))
{getchar();
printf("\n\t\t **现在位置在排序菜单 - 数学排序**\n");
printf("\n\t ** 'y'=使用当前文件名 'n'=输入

新文件名 ** : ");
if((ch=getchar())=='y')
{} /*追加文档*/
else Inputfilename();
fp=readfile(); /*读取文档*/
ffp=readfile2(); /*(开打方式'读'**'引用读文件名')读文件付本*/
temp1=ReadComputer2Two(ffp); /*读出付本中的数据(二进制方式)*/
fclose(ffp);
ReadComputer2(temp1,fp); /*(2方式)数据写入机器*/
fclose(fp);
Math_ranking(temp1); /*数学排序函数*/
temp1=0;temp2=0;
RankingMenu();location='3';
printf("\n请输入选项 1 - 4 (当前在排序菜单):");
continue;
}
if((ch=='2')&&(location=='3'))
{getchar();
printf("\n\t\t **现在位置在排序菜单 - C语言排序**\n");
printf("\n\t ** 'y'=使用当前文件名 'n'=输入新文件名 ** : ");
if((ch=getchar())=='y')
{} /*追加文档*/
else Inputfilename();
fp=readfile(); /*读取文档*/
ffp=readfile2(); /*(开打方式'读'**'引用读文件名')读文件付本*/
temp1=ReadComputer2Two(ffp); /*读出付本中的数据(二进制方式)*/
fclose(ffp);
ReadComputer2(temp1,fp); /*(2方式)数据写入机器*/
fclose(fp);
C_ranking(temp1); /*数学排序函数*/
temp1=0;temp2=0;
RankingMenu();location='3';
printf("\n请输入选项 1 - 4 (当前在排序菜单):");
continue;
}
if((ch=='3')&&(location=='3'))
{getchar();
printf("\n\t\t **现在位置在排序菜单 - 总分排序**\n");
printf("\n\t ** 'y'=使用当前文件名 'n'=输入新文件名 ** : ");
if((ch=getchar())=='y')
{} /*追加文档*/
else Inputfilename();
fp=readfile(); /*读取文档*/
ffp=

readfile2(); /*(开打方式'读'**'引用读文件名')读文件付本*/
temp1=ReadComputer2Two(ffp); /*读出付本中的数据(二进制方式)*/
fclose(ffp);
ReadComputer2(temp1,fp); /*(2方式)数据写入机器*/
fclose(fp);
Amount_ranking(temp1); /*数学排序函数*/
temp1=0;temp2=0;
RankingMenu();location='3';
printf("\n请输入选项 1 - 4 (当前在排序菜单):");
continue;
}
if((ch=='4')&&(location=='3'))
{MainMenu();location='1';
printf("\n请输入选项 1 - 6 (当前在主菜单):");
break;
}
}
}

if((ch=='5')&&(location=='1'))
{InquireMenu();location='4';
printf("\n请输入选项 1 - 6 (当前在查询菜单):");
while((ch=getchar())!='0'){
if((ch=='1')&&(location=='4'))
{getchar();
printf("\n\t\t **现在位置在查询菜单 - 学号查询**\n");
printf("\n\t ** 'y'=使用当前文件名 'n'=输入新文件名 ** : ");
if((ch=getchar())=='y')
{} /*追加文档*/
else Inputfilename();
Num_inquire(); /*学号查询*/
InquireMenu();location='4';
printf("\n请输入选项 1 - 6 (当前在查询菜单):");
continue;
}
if((ch=='2')&&(location=='4'))
{getchar();
printf("\n\t\t **现在位置在查询菜单 - 姓名查询**\n");
printf("\n\t ** 'y'=使用当前文件名 'n'=输入新文件名 ** : ");
if((ch=getchar())=='y')
{} /*追加文档*/
else Inputfilename();
Name_inquire(); /*姓名查询*/
InquireMenu();location='4';
printf("\n请输入选项 1 - 6 (当前在查询菜单):");
continue;
}
if((ch=='3')&&(location=='4'))
{getchar();
printf("\n\t\t **现在位置在查询菜单 - 数学成绩查询**\n");
printf("\n\t ** 'y'=使用当前文件名 'n'=输入新文件名 ** : ");
if((ch=getchar())=='y')
{}

/*追加文档*/
else Inputfilename();
Math_inquire(); /*数学查询*/
InquireMenu();location='4';
printf("\n请输入选项 1 - 6 (当前在查询菜单):");
continue;
}
if((ch=='4')&&(location=='4'))
{getchar();
printf("\n\t\t **现在位置在查询菜单 - C成绩查询**\n");
printf("\n\t ** 'y'=使用当前文件名 'n'=输入新文件名 ** : ");
if((ch=getchar())=='y')
{} /*追加文档*/
else Inputfilename();
C_inquire(); /*C查询*/
InquireMenu();location='4';
printf("\n请输入选项 1 - 6 (当前在查询菜单):");
continue;
}
if((ch=='5')&&(location=='4'))
{getchar();
printf("\n\t\t **现在位置在查询菜单 - 总分查询**\n");
printf("\n\t ** 'y'=使用当前文件名 'n'=输入新文件名 ** : ");
if((ch=getchar())=='y')
{} /*追加文档*/
else Inputfilename();
Amount_inquire(); /*总分查询*/
InquireMenu();location='4';
printf("\n请输入选项 1 - 6 (当前在查询菜单):");
continue;
}
if((ch=='6')&&(location=='4'))
{MainMenu();location='1';
printf("\n请输入选项 1 - 6 (当前在主菜单):");
break;
}
}
}
}
}

相关文档
最新文档