本文目录一览:
typedef用法
建议修改为
typedef struct tagNode
{
char *pItem;
tagNode *pNext;
}pNode;
然后使用pNode *a声明结构指针。 否则声明pNode pNext;时, 类型名pNode还没有生成
grtchar()
#include "iostream.h"
#includestdio.h
void main()
{
int i;
char Rname[10];
for(i=0;(Rname[i]=getchar())!='\n';i++) ;//加了一个括号就好了
Rname[i]='\0';
cout"你输入的是:";
for(i=0;Rname[i]!='\0';i++)coutRname[i];
}
完成学生信息系统的项目开发,要求实现学生信息的录入、查询、修改、排序和统计等主要功能。
已经编译运行通过:
#include "stdio.h"
#include "string.h"
#include "stdlib.h"
#include "conio.h"
struct subject{ //科目信息结构体
float Chinese; //语文
float Math; //数学
float English; //英语
};
struct student{
int no; //学号
char name[20]; //姓名
char sex; //性别
char address[20]; //地址
char telephone[20];//电话
subject score; //3门科目的成绩
float avg; //3门平均成绩
}stud[50]; //结构体数组
int count=0; //计数变量,记录学生人数
void add(){ //增加学生信息函数
student a; //临时结构体变量a
char x,j; //Yes or No输入字符变量
//循环输入学生信息
for(int i=0;i50;i++){
system("cls"); //清屏函数
int t=0;
printf("请输入学生的学号:");
scanf("%d",a.no);
//寻找学号是否已存在
for(int k=0;kcount;k++){
if(stud[k].no==a.no){
t=1;
}
}
//存在与否,分别输出
if(t==1)
printf("输入的学号已存在,请重新输入\n");
else{
printf("请输入学生的姓名:");
scanf("%s",a.name);
printf("请输入学生的性别(m代表男,f代表女):");
scanf("%c",a.sex);
scanf("%c",a.sex);
printf("请输入学生的地址:");
scanf("%s",a.address);
printf("请输入学生的电话:");
scanf("%s",a.telephone);
printf("请输入学生的语文成绩:");
scanf("%f",a.score.Chinese);
printf("请输入学生的数学成绩:");
scanf("%f",a.score.Math);
printf("请输入学生的英语成绩:");
scanf("%f",a.score.English);
a.avg=(a.score.Chinese+a.score.English+a.score.Math)/3;
//判定是否要增加该记录
printf("确定要增加该记录吗?(y/n)");
scanf("%c",x);
scanf("%c",x);
if(x=='y'){
stud[count]=a;
count++;
}
}
//判定是否要继续增加记录
printf("要继续增加记录吗?(y/n)");
scanf("%c",j);
scanf("%c",j);
if(j=='n')
break;
}
printf("\n按任意键返回主菜单:");
getch(); //从键盘接收任意一个字符就返回
}
void show(){ //显示所有学生信息函数
system("cls");
//循环显示
for(int i=0;icount;i++){
printf("学号:%-8d姓名:%-16s性别:%c\n",stud[i].no,stud[i].name,stud[i].sex);
printf("地址:%s\n电话:%s\n",stud[i].address,stud[i].telephone);
printf("语文成绩:%-8.1f数学成绩:%-8.1f英语成绩:%-8.1f平均成绩:%.1f\n",stud[i].score.Chinese,
stud[i].score.Math,stud[i].score.English,stud[i].avg);
printf("---------------------------------------------------------------------\n");
}
printf("\n按任意键返回主菜单:");
getch();
}
void sort(){ //根据学生的学号由小到大进行排序
system("cls");
//冒泡排序法
for(int i=0;icount-1;i++){
for(int j=0;jcount-1-i;j++){
if(stud[j].nostud[j+1].no){
student t=stud[j];
stud[j]=stud[j+1];
stud[j+1]=t;
}
}
}
printf("排序已完成,按任意键返回主菜单:");
getch();
}
void query1(){ //根据学号查询并显示单个学生信息
int x; //输入学生学号整型变量
char k; //Yes or No输入字符变量
while(true){
system("cls");
int t=-1; //要查询的学生学号所对应的数组下标,-1代表在数组中没对应下标
printf("请输入要查询的学生学号:");
scanf("%d",x);
//循环寻找结构体数组中符合变量x的数据,并把该数据所在的下标值赋给变量t
for(int i=0;icount;i++){
if(stud[i].no==x)
t=i;
}
//判定信息是否存在,分别输出
if(t==-1)
printf("您所查询的学生信息不存在,");
else{
printf("学号:%-8d姓名:%-16s性别:%c\n",stud[t].no,stud[t].name,stud[t].sex);
printf("地址:%s\n电话:%s\n",stud[t].address,stud[t].telephone);
printf("语文成绩:%-8.1f数学成绩:%-8.1f英语成绩:%-8.1f平均成绩:%.1f\n",stud[t].score.Chinese,
stud[t].score.Math,stud[t].score.English,stud[t].avg);
printf("---------------------------------------------------------------------\n");
}
//判定是否要继续查询
printf("是否继续查询?(y/n)");
scanf("%c",k);
scanf("%c",k);
if(k=='n')
break;
}
printf("\n按任意键返回主菜单:");
getch();
}
void query2(){ //根据姓名查询并显示单个学生信息
char x[20]; //输入学生姓名字符串变量
char k; //Yes or No输入字符变量
while(true){
system("cls");
student a[50]; //要查询的学生姓名所对应的数组下标,-1代表在数组中没对应下标
int t=0;
printf("请输入要查询的学生姓名:");
scanf("%s",x);
//循环寻找结构体数组中符合变量x的数据,并把该数据所在的下标值赋给变量t
for(int i=0;icount;i++){
if(strcmp(stud[i].name,x)==0){
a[t]=stud[i];
t++;
}
}
//判定信息是否存在,分别输出
if(t==0)
printf("您所查询的学生信息不存在,");
else{
for(int i=0;it;i++){
printf("学号:%-8d姓名:%-16s性别:%c\n",a[i].no,a[i].name,a[i].sex);
printf("地址:%s\n电话:%s\n",a[i].address,a[i].telephone);
printf("语文成绩:%-8.1f数学成绩:%-8.1f英语成绩:%-8.1f平均成绩:%.1f\n",a[i].score.Chinese,
a[i].score.Math,a[i].score.English,a[i].avg);
printf("---------------------------------------------------------------------\n");
}
}
//判定是否要继续查询
printf("是否继续查询?(y/n)");
scanf("%c",k);
scanf("%c",k);
if(k=='n')
break;
}
printf("\n按任意键返回主菜单:");
getch();
}
void good(){ //显示平均成绩和单科成绩最高的学生资料
int i=0;
system("cls");
//寻找平均成绩中的最高值
float max1=stud[0].avg;
for(i=1;icount;i++)
if(stud[i].avgmax1)
max1=stud[i].avg;
//输出平均成绩中最高值的学生信息
for(i=0;icount;i++){
if(max1==stud[i].avg){
printf("平均成绩最高的学生信息:\n\n");
printf("学号:%-8d姓名:%-16s性别:%c\n",stud[i].no,stud[i].name,stud[i].sex);
printf("地址:%s\n电话:%s\n",stud[i].address,stud[i].telephone);
printf("语文成绩:%-8.1f数学成绩:%-8.1f英语成绩:%-8.1f平均成绩:%.1f\n",stud[i].score.Chinese,
stud[i].score.Math,stud[i].score.English,stud[i].avg);
printf("---------------------------------------------------------------------\n");
}
}
//寻找语文成绩中的最高值
float max2=stud[0].score.Chinese;
for(i=1;icount;i++)
if(stud[i].score.Chinesemax2)
max2=stud[i].score.Chinese;
//输出语文成绩中最高值的学生信息
for(i=0;icount;i++){
if(max2==stud[i].score.Chinese){
printf("语文成绩最高的学生信息:\n\n");
printf("学号:%-8d姓名:%-16s性别:%c\n",stud[i].no,stud[i].name,stud[i].sex);
printf("地址:%s\n电话:%s\n",stud[i].address,stud[i].telephone);
printf("语文成绩:%-8.1f数学成绩:%-8.1f英语成绩:%-8.1f平均成绩:%.1f\n",stud[i].score.Chinese,
stud[i].score.Math,stud[i].score.English,stud[i].avg);
printf("---------------------------------------------------------------------\n");
}
}
//寻找数学成绩中的最高值
float max3=stud[0].score.Math;
for(i=1;icount;i++)
if(stud[i].score.Mathmax3)
max3=stud[i].score.Math;
//输出数学成绩中最高值的学生信息
for(i=0;icount;i++){
if(max3==stud[i].score.Math){
printf("数学成绩最高的学生信息:\n\n");
printf("学号:%-8d姓名:%-16s性别:%c\n",stud[i].no,stud[i].name,stud[i].sex);
printf("地址:%s\n电话:%s\n",stud[i].address,stud[i].telephone);
printf("语文成绩:%-8.1f数学成绩:%-8.1f英语成绩:%-8.1f平均成绩:%.1f\n",stud[i].score.Chinese,
stud[i].score.Math,stud[i].score.English,stud[i].avg);
printf("---------------------------------------------------------------------\n");
}
}
//寻找英语成绩中的最高值
float max4=stud[0].score.English;
for(i=1;icount;i++)
if(stud[i].score.Englishmax4)
max4=stud[i].score.English;
//输出英语成绩中最高值的学生信息
for(i=0;icount;i++){
if(max4==stud[i].score.English){
printf("英语成绩最高的学生信息:\n\n");
printf("学号:%-8d姓名:%-16s性别:%c\n",stud[i].no,stud[i].name,stud[i].sex);
printf("地址:%s\n电话:%s\n",stud[i].address,stud[i].telephone);
printf("语文成绩:%-8.1f数学成绩:%-8.1f英语成绩:%-8.1f平均成绩:%.1f\n",stud[i].score.Chinese,
stud[i].score.Math,stud[i].score.English,stud[i].avg);
printf("---------------------------------------------------------------------\n");
}
}
printf("\n按任意键返回主菜单:");
getch();
}
void update(){
int x; //输入学生学号整型变量
student a; //临时结构体变量a
char k,j; //Yes or No输入字符变量
while(true){
system("cls");
int t=-1; //要查询的学生学号所对应的数组下标,-1代表在数组中没对应下标
printf("请输入要修改的学生学号:");
scanf("%d",x);
//循环寻找结构体数组中符合变量x的数据,并把该数据所在的下标值赋给变量t
for(int i=0;icount;i++){
if(stud[i].no==x)
t=i;
}
//判定信息是否存在,分别输出
if(t==-1)
printf("您所要修改的学生信息不存在,");
else{
//输出要修改学生的原信息
printf("学号:%-8d姓名:%-16s性别:%c\n",stud[t].no,stud[t].name,stud[t].sex);
printf("地址:%s\n电话:%s\n",stud[t].address,stud[t].telephone);
printf("语文成绩:%-8.1f数学成绩:%-8.1f英语成绩:%-8.1f平均成绩:%.1f\n",stud[t].score.Chinese,
stud[t].score.Math,stud[t].score.English,stud[t].avg);
printf("---------------------------------------------------------------------\n");
//判定是否要修改
printf("确定要修改该记录吗?(y/n)");
scanf("%c",k);
scanf("%c",k);
//确定要修改后,输入新信息
if(k=='y'){
printf("请输入新的学生的学号:");
scanf("%d",a.no);
printf("请输入新的学生的姓名:");
scanf("%s",a.name);
printf("请输入新的学生的性别:");
scanf("%c",a.sex);
scanf("%c",a.sex);
printf("请输入新的学生的地址:");
scanf("%s",a.address);
printf("请输入新的学生的电话:");
scanf("%s",a.telephone);
printf("请输入新的学生的语文成绩:");
scanf("%f",a.score.Chinese);
printf("请输入新的学生的数学成绩:");
scanf("%f",a.score.Math);
printf("请输入新的学生的英语成绩:");
scanf("%f",a.score.English);
a.avg=(a.score.Chinese+a.score.English+a.score.Math)/3;
stud[t]=a;
printf("修改成功,");
}
}
//判定是否继续
printf("是否继续修改?(y/n)");
scanf("%c",j);
scanf("%c",j);
if(j=='n')
break;
}
printf("\n按任意键返回主菜单:");
getch();
}
void del(){
int x; //输入学生学号整型变量
char k,j; //Yes or No输入字符变量
while(true){
system("cls");
int t=-1; //要查询的学生学号所对应的数组下标,-1代表在数组中没对应下标
printf("请输入要删除的学生学号:");
scanf("%d",x);
//循环寻找结构体数组中符合变量x的数据,并把该数据所在的下标值赋给变量t
for(int i=0;icount;i++){
if(stud[i].no==x)
t=i;
}
//判定信息是否存在,分别输出
if(t==-1)
printf("您所要删除的学生信息不存在,");
else{
//输出要删除学生的原信息
printf("学号:%-8d姓名:%-16s性别:%c\n",stud[t].no,stud[t].name,stud[t].sex);
printf("地址:%s\n电话:%s\n",stud[t].address,stud[t].telephone);
printf("语文成绩:%-8.1f数学成绩:%-8.1f英语成绩:%-8.1f平均成绩:%.1f\n",stud[t].score.Chinese,
stud[t].score.Math,stud[t].score.English,stud[t].avg);
printf("---------------------------------------------------------------------\n");
//判定是否删除
printf("确认要删除吗?(y/n)");
scanf("%c",k);
scanf("%c",k);
//确定要删除后,删除该信息
if(k=='y'){
for(int i=t;icount-1;i++)
stud[i]=stud[i+1];
printf("删除成功,");
count--;
}
}
//判定是否继续
printf("是否继续删除?(y/n)");
scanf("%c",j);
scanf("%c",j);
if(j=='n')
break;
}
printf("\n按任意键返回主菜单:");
getch();
}
void grt(){
system("cls");
printf("\n按任意键返回主菜单:");
getch();
}
void grt1()
{
int choice=0; //保存用户输入的选择项
do{
system("cls"); //清屏函数
printf("\t----------------学生信息管理系统----------------\n\n");
printf("\t\t在菜单中选择以下的操作类型\n");
printf("\t\t1.增加记录\n\t\t2.显示所有学生信息\n\t\t3.信息排序\n\t\t4.根据学号查询单个学生信息\n\t\t5.根据姓名查询单个学生信息\n");
printf("\t\t6.平均成绩和单科成绩最高的学生资料\n\t\t7.修改记录\n\t\t8.删除记录\n\t\t9.退出程序\n\t\t0.制作人\n");
printf("\t\t请输入你的选择:");
scanf("%d",choice);
switch(choice)
{
case 1:
add();
break;
case 2:
show();
break;
case 3:
sort();
break;
case 4:
query1();
break;
case 5:
query2();
break;
case 6:
good();
break;
case 7:
update();
break;
case 8:
del();
break;
case 0:
grt();
break;
}
}while(choice!=9);
}
void main()
{
char x[10];
printf("\t----------------学生信息管理系统----------------\n\n");
grt1();
}