跪求高手帮助做一C++程序
学生基本信息管理软件设计:可以采用结构体数组结合文件形式存储学生的信息,每个学生应包含如下几方面的信息(其中后三项的值指成绩):学号、姓名、性别、学院、专业班级,外语、计算机、数学。软件由主模块(含欢迎界面)+下列5个功能模块组成:(1)删除一个学生的信息(需指定要删除学生的学号);(2)增加一个学生的信息(需输入要增加学生的所有信息);(3)查找一个学生的信息(需指定学号或姓名);(4)按三门课总分排列所有学生信息;(5)退出程序的运行。小弟先在此谢过~~~~
追问: warning C4129: 's' : unrecognized character escape sequence
(51) : warning C4129: 's' : unrecognized character escape sequence
(329) : warning C4129: 's' : unrecognized character escape sequence
答案:/* 已经经过测试。记录文件保存在E盘 名为student.bin 望采纳 谢谢*/
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <conio.h>
struct record
{
char id[10];
char name[20];
char 易做图[10];
char college[20];
char major[30];
char english[10];
char computer[10];
char math[10];
}student[500];
int num=0;//外部变量num为文件中的纪录数
FILE *fp;
void mainmenu();//主菜单
void newrecord();//新添纪录
void searchmenu();//查询菜单
void searchbyid();//按学号查询
void searchbyname();//按姓名查询
void deletemenu();//删除菜单
void deleteone();//删除单个
void showall();//显示所有
void readfromfile();//读取文件
void writetofile();//写入文件
void deletebyid();//按学号删除
void scoreorder();//按总分排序
void changemenu();//修改菜单
void changename(int i);//修改姓名
void change易做图(int i);//修改性别
void changecollege(int i);//修改学院
void changemajor(int i);//修改专业班级
void changeenglish(int i);//修改外语
void changecomputer(int i);//修改计算机
void changemath(int i);//修改数学
void main()
{
readfromfile();
while (1)
{
mainmenu();
}
}
void readfromfile()//从文件导入
{
if((fp=fopen("E:\student.bin","rb"))==NULL)
{
printf("\n\t\t通讯录文件不存在");
if ((fp=fopen("D:\student.bin","wb"))==NULL)
{
printf("\n\t\t建立失败");
exit(0);
}
else
{
printf("\n\t\t通讯录文件已建立");
printf("\n\t\t按任意键进入主菜单");
getch();
return;
}
exit(0);
}
fseek(fp,0,2); /*文件位置指针移动到文件末尾*/
if (ftell(fp)>0) /*文件不为空*/
{
rewind(fp); /*文件位置指针移动到文件开始位置*/
for (num=0;!feof(fp) && fread(&student[num],sizeof(struct record),1,fp);num++);
printf("\n\t\t文件导入成功");
printf("\n\t\t按任意键返回主菜单");
getch();
return;
}
printf("\n\t\t文件导入成功");
printf("\n\t\t通讯录文件中无任何纪录");
printf("\n\t\t按任意键返回主菜单");
getch();
return;
}
void mainmenu()//主菜单
{
char choic;
getch();
system("cls");
printf("\n\t\t******************** 主菜单 ******************");
printf("\n\t\t*********** 1-新添纪录 2-查询菜单 ************");
printf("\n\t\t*********** 3-删除菜单 4-总分排列*************");
printf("\n\t\t*********** 5-保存退出 6-不保存退出***********");
printf("\n\t\t**********************************************");
printf("\n\t\t请选择:");
choic=getch();
system("cls");
switch (choic)
{
case '1':newrecord();break;
case '2':searchmenu();break;
case '3':deletebyid();break;
case '4':scoreorder();showall();break;
case '5':writetofile();break;
case '6':exit(0);
default:mainmenu();
}
}
void searchmenu()//查询菜单
{
char choic;
system("cls");
printf("\n\t\t******************* 查询菜单 *******************");
printf("\n\t\t********** 1-显示所有 2-按学号查询 3-按姓名查询 ************");
printf("\n\t\t********** 4-返回主菜单 ************");
printf("\n\t\t************************************************");
printf("\n\t\t请选择:");
choic=getch();
switch (choic)
{
case '1':showall();break;
case '2':searchbyid();break;
case '3':searchbyname();break;
case '4':mainmenu();break;
}
} void deletebyid()//按学号删除
{
int i,j;
int deletemark=0;
char id[20];
printf("\n\t\t请输入要删除学生学号:");
scanf("%s",id);
if(num==0)
{
printf("\n\t\t对不起,文件中无任何纪录");
printf("\n\t\t按任意键返回主菜单");
getch();
return;
}
for (i=0;i<num;i++)
{
if (strcmp(student[i].id,id)==NULL)
{
printf("\n\t\t以下是您要删除的学生纪录:");
printf("\n\t\t学号: %s",student[i].id);
printf("\n\t\t姓名: %s",student[i].name);
printf("\n\t\t性别: %s",student[i].易做图);
printf("\n\t\t学院: %s",student[i].college);
printf("\n\t\t专业: %s",student[i].major);
printf("\n\t\t外语: %s",student[i].english);
printf("\n\t\t计算机:%s",student[i].computer);
printf("\n\t\t数学:%s",student[i].math);
printf("\n\t\t是否删除?(y/n)");
if (getch()=='y')
{
for (j=i;j<num-1;j++) /*纪录移动,从stud数组中删除之*/
student[j]=student[j+1];
num--;
deletemark++;
printf("\n\t\t删除成功");
printf("\n\t\t是否继续删除?(y/n)");
if (getch()=='y')
deletebyid();
return;
}
else
return;
}
continue;
}
if (deletemark==0)
{
printf("\n\t\t没有该同学的纪录");
printf("\n\t\t是否继续删除?(y/n)");
if (getch()=='y')
deletebyid();
return;
}
}
int sole(char id[10]){//判断id是否唯一
int i;
for(i=0;i<num;i++)
{
if(strcmp(student[i].id,id)==0)
{
return 0;
}
}
return 1;
}
void newrecord()//添加纪录
{
char sid[10];
printf("\n\t\t**************** 请输入学生信息 ****************\n");
printf("\n\t\t输入学号:");
scanf("%s",sid);
while(!sole(sid)){
printf("\n\t\t学号%s已经被使用,请重新输入:",sid);
scanf("%s",sid);
}
strcpy(student[num].id,sid);
printf("\n\t\t输入姓名:");
scanf("%s",&student[num].name);
printf("\n\t\t输入性别:");
scanf("%s",&student[num].易做图);
printf("\n\t\t输入学院:");
scanf("%s",&student[num].college);
printf("\n\t\t输入专业:");
scanf("%s",&student[num].major);
printf("\n\t\t输入外语:");
scanf("%s",&student[num].english);
printf("\n\t\t输入计算机:");
scanf("%s",&student[num].computer);
printf("\n\t\t输入数学:");
scanf("%s",&student[num].math);
num++;
printf("\n\t\t是否继续添加?(Y/N):");
if (getch()=='y')
newrecord();
return;
}
void showall()//显示所有
{
int i;
system("cls");
if(num!=0)
{
printf("\n\t\t*************** 以下为通讯录所有信息************");
for (i=0;i<num;i++)
{
printf("\n\t\t学号: %s",student[i].id);
printf("\n\t\t姓名: %s",student[i].name);
printf("\n\t\t性别: %s",student[i].易做图);
printf("\n\t\t学院: %s",student[i].college);
printf("\n\t\t专业: %s",student[i].major);
printf("\n\t\t外语: %s",student[i].english);
printf("\n\t\t计算机:%s",student[i].computer);
printf("\n\t\t数学:%s",student[i].math);
printf("\t\t");
if (i+1<num)
{
printf("\n\t\t__________________________");
system("pause");
}
}
printf("\n\t\t************************************************");
}
else
printf("\n\t\t通讯录中无任何纪录");
printf("\n\t\t按任意键返回主菜单:");
getch();
return;
}
void scoreorder()//按总分排序
{
int i,j;
struct record t; //t为临时变量
for(i=0;i<num;i++) //从第一个元素开始对n个元素一次进行插入排序
{ //假定当前准备对第i个元素进行插入排序,前面得i-1个元素已经
for(t=student[i],j=i-1;j>=0&&(atoi(t.english)+atoi(t.computer)+atoi(t.math))>(atoi(student[j].english)+atoi(student[j].computer)+atoi(student[j].math));j--) //按从小到大排好序了。将a[i]提取出来放在临时变量t中,其从a[i-1]开始与前面得元素依次进行比较,若小于,则将该元素后移一位,直到找到第一个t>a[j],停止比较,将t放在该元素后面,即放在a[j+1]中
{
student[j+1]=
上一个:基于VS2005的C++详细语法?
下一个:ACM 简单题求助(用C++)。