题目:学生成绩管理(结构体数组、函数、指针、文件、选择、循环)
学生记录包括学号、姓名、语文成绩、数学成绩、总成绩。
程序显示功能选择:1、成绩信息添加;2、成绩信息显示;3、成绩信息查询;4、成绩信息记录(根据输入的姓名);5、修改成绩信息(根据输入的姓名);6、保存成绩信息;7、退出。
********************************************************************************************
不全是自己的东西的说 2017/12
#include<stdio.h> /*标准输入输出函数库*/
#include<stdlib.h> /*标准函数库*/
#include<string.h> /*字符串函数库*/
#define FILENAME "phone.dat"
struct date //定义一个结构体类型数组
{ char name[10]; /*姓名*/
char sex[20];
char age[20];
char address[50];
char phone[12];
char qq[20];
}per[10];
int menu() //主菜单选择函数
{ int c; //定义一个整型变量
do{
system("cls"); //清屏
printf("\t**************欢迎登录通讯录管理系统*******************\n");
printf("\t--------------------\n");
printf("\t 1、通讯信息增加 \n");
printf("\t 2、通讯信息显示 \n");
printf("\t 3、通讯信息查询 \n");
printf("\t 4、通讯信息删除 \n");
printf("\t 5、通讯信息修改 \n");
printf("\t 6、通讯信息保存 \n");
printf("\t 7. 退出 \n");
printf("\t--------------------\n");
printf("\t请您选择(1-7):");
scanf("%d",&c);
}while(c>7&&c<1);
return(c);
}
int Input(struct date per[10],int n)
{ int i=0;
char sign,x[10];
while(sign!='n'&&sign!='N')
{ printf("\tname:");
scanf("%s",per[n+i].name);
printf("\tsex:");
scanf("%s",per[n+i].sex);
printf("\tage:");
scanf("%s",per[n+i].age);
printf("\taddress:");
scanf("%s",per[n+i].address);
printf("\tphone:");
scanf("%s",per[n+i].phone);
printf("\tqq:");
scanf("%s",per[n+i].qq);
gets(x);
printf("\n\t是否继续添加?(Y/N)");
fflush(stdin); //清空缓存
scanf("%c",&sign);
i++;
}
return(n+i);
}
void writeToFile(struct date per[10],int n)
{ FILE *fp=NULL;
int i=0;
fp=fopen("phone.dat","wb");
if(fp==NULL)
{ printf("打开文件出错!\n");
exit(0);
}
for(i=0;i<10;i++)
fwrite(&per[i],sizeof(per),1,fp); //把字节为1的信息写入文件
fclose(fp);
}
void Display(struct date per[10],int n)
{ int i;
printf("----------------------------------------------------------------------\n"); //格式/
printf(" 姓名 性别 年龄 籍贯 联系电话 qq号\n");
printf("----------------------------------------------------------------------\n");
for(i=1;i<n+1;i++)
{
printf("%-15s%-15s%-15s%-14s%-14s%-14s\n",per[i-1].name,per[i-1].sex,per[i-1].age,per[i-1].address,per[i-1].phone,per[i-1].qq);
if(i>1&&i%10==0)
{ printf("\t-----------------------------------\n");
printf("\t");
getchar();
getchar();
printf("\t-----------------------------------\n");
}
}
printf("----------------------------------------------------------------------\n");
getchar();
getchar();
}
int Delete_a_record(struct date per[10],int n)
{ char s[20];
int i=0,j;
printf("\t请输入想删除记录中的名字:");
scanf("%s",s);
while(strcmp(per[i].name,s)!=0&&i<n) i++;
if(i==n)
{printf("\t通讯录中没有此人!\n");
return(n);
}
for(j=i;j<n-1;j++)
{ strcpy(per[j].phone,per[j+1].phone);
strcpy(per[j].name,per[j+1].name);
strcpy(per[j].qq,per[j+1].qq);
strcpy(per[j].age,per[j+1].age);
}
printf("\t\t\t已经成功删除!\n");
return(n-1);
}
void Query_a_record(struct date per[10],int n)
{ int m;
printf("\t\n请选择查询方式:\n");
printf("\t┌──────┐\n");
printf("\t│1------姓名 │\n");
printf("\t│2------电话 │\n");
printf("\t│3------返回 │\n");
printf("\t└──────┘\n");
printf("请选择:");
scanf("%d",&m);
while(m!=1&&m!=2&&m!=3&&m!=4)
{
printf("输入错误,请重新选择:");
scanf("%d",&m);
}
if(m==1)
{ char s[20];
int i=0;
printf("\t请输入想查询的姓名:");
scanf("\t%s",s);
while(strcmp(per[i].name,s)!=0&&i<n) i++;
if(i==n)
{
printf("\t通讯录中没有此人!\n");
return;
}
printf("\t电话号码: %s\n",per[i].phone);
printf("\t年龄: %s\n",per[i].age);
printf("\t性别: %s\n",per[i].sex);
printf("\tqq:%s\n",per[i].qq);
printf("\t籍贯: %s\n",per[i].address);
} ;
if(m==2)
{ char s[20];
int i=0;
printf("\t请输入想查询的电话:");
scanf("\t%s",s);
while(strcmp(per[i].phone,s)!=0&&i<n) i++;
if(i==n)
{
printf("\t通讯录中没有此人!\n");
return;
}
printf("\t此人姓名: %s\n",per[i].name);
printf("\t籍贯: %s\n",per[i].address);
printf("\t性别: %s\n",per[i].sex);
printf("\t此人qq: %s\n",per[i].qq);
printf("\t年龄: %s\n",per[i].age);
} ;
}
void Change(struct date per[10],int n)
{ char s[20];
int i=0;
printf("\t请输入想修改的记录中的名字:");
scanf("%s",s);
while(strcmp(per[i].name,s)!=0&&i<n) i++;
if(i==n)
{ printf("\t通讯录中没有此人!\n");
return;
}
printf("姓名:");
scanf("%s",per[i].name);
printf("性别:");
scanf("%s",per[i].sex);
printf("籍贯:");
scanf("%s",per[i].address);
printf("电话号码:");
scanf("%s",per[i].phone);
printf("qq:");
scanf("%s",per[i].qq);
printf("年龄:");
scanf("%s",per[i].age);
printf("\n修改成功!");
}
void WritetoText(struct date per[10],int n)
{ int i=0;
FILE *fp; //定义文件指针
char filename[20]; //定义文件名
printf("\t保存到文件\n"); //输入文件名
if((fp=fopen("phone.dat","w"))==NULL)
{ printf("\t无法打开文件\n");
getchar();
getchar();
return;
}
fprintf(fp,"***************************************通讯录********************************\n");
fprintf(fp," 姓名 性别 年龄 籍贯 联系电话 QQ号\n");
fprintf(fp,"-----------------------------------------------------------------------------\n");
while(i<n)
{ fprintf(fp,"%-10s\t%-20s\t%-20s\t%-20s\t%-20s\t%-20s\n",per[i].name,per[i].sex,per[i].age,per[i].address,per[i].phone,per[i].qq);
i++;
}
fprintf(fp,"-------------------------------------------------------------------------\n");
fprintf(fp,"********************************共有%d条记录***************************\n",n);
fclose(fp); //关闭文件
printf("保存成功!\n");
}
int main() //主函数
{ int n=0,i;
while(1)
{ switch (menu())
{ case 1:
printf("\n\t添加记录到通讯录\n"); //添加记录
n=Input(per,n);
break;
case 2:
printf("\n\t\t\t 通讯录记录表\n"); //显示记录
Display(per,n);
break;
case 3:
printf("\n\t在通讯录中查找记录\n");
Query_a_record(per,n); //查找记录
printf("\t");
getchar();
getchar();
break;
case 4:
printf("\n\t从通讯录中删除记录\n");
n=Delete_a_record(per,n); //删除记录
printf("\t");
getchar();
getchar();
break;
case 5:
printf("\n\t修改通讯录中的记录\n");
Change(per,n); //修改数据
printf("\t");
getchar();
getchar();
break;
case 6:
printf("\n\t保存功能\n");
WritetoText(per,n); //保存数据
printf("\t");
getchar();
getchar(); //操作完成后进行暂停
break;
case 7:
printf("\n\t\t谢谢使用,再见!\n"); //结束程序
printf("\n\t\t");
getchar();
getchar();
exit(0);
}
}
}