第1个回答 2009-02-22
先贴上!自己写的。
/* 简易学生档案管理系统 win-tc和Dev-c++下运行良好,注意不是vc++下*/
#include<stdio.h>
#include<string.h>
#define BUFLEN 80 /* 缓冲区最大字符数 */
#define CODELEN 10 /* 学号最大字符数,实际请更改 */
#define NAMELEN 15 /* 姓名最大字符数,实际请更改*/
#define N 200 /* 最大学生人数,实际请更改*/
#define M 5 /* 课程数,实际请更改 */
struct record
{
char code[CODELEN+1]; /* 学号 */
char name[NAMELEN+1]; /* 姓名 */
int mark[M]; /* 课程成绩 */
float average; /* 平均成绩 */
}stu[N];
int k=1,n,m;
int order[N];
void readfile();/* 函数声明 */
void seek();
void sort();
void insert();
void del();
void display();
void save();
void menu();
int main()
{ while(k)
menu();
system("pause");
return 0;
}
void readfile()/* 建立信息 */
{
char buf[BUFLEN],*p="student.dat";
FILE *fp;
int i=0;
if ((fp=fopen("student.dat","r"))==NULL)
{ printf("Open file %s error! Strike any key to exit!",p);
getch();
exit(0);
}
while(fscanf(fp,"%s %s%d%d%d%f",stu[order[i]].code,stu[order[i]].name,&stu[order[i]].mark[0],&stu[order[i]].mark[1],&stu[order[i]].mark[2],&stu[order[i]].average)==6)
{ i++;
order[i]=i;
}
fclose(fp);
n=i;
printf("录入完毕!\n");
}
void seek()
{int i,j,item,flag;
float avr;
char s1[21]; /* 以姓名和学号最长长度+1为准 */
printf("------------------\n");
printf("1.按学号查询\n");
printf("2.按姓名查询\n");
printf("3.按成绩查询\n");
printf("4.退出本菜单\n");
printf("------------------\n");
while(1)
{ printf("请选择子菜单编号:");
scanf("%d",&item);
flag=0;
switch(item)
{
case 1:
printf("请输入要查询的学生的学号:\n");
scanf("%s",s1);
for(i=0;i<n;i++)
if(strcmp(stu[order[i]].code,s1)==0)
{ flag=1;
printf("该学生学号、姓名和 %d 门课成绩及平均成绩为:\n",M);
printf("%s %s ",stu[order[i]].code,stu[order[i]].name);
for(j=0;j<M;j++)
printf("%-4d",stu[order[i]].mark[j]);
printf(" %.2f",stu[order[i]].average);
printf("\n");
}
if(flag==0)
printf("该学号不存在!\n"); break;
case 2:
printf("请输入要查询的学生的姓名:\n");
scanf("%s",s1);
for(i=0;i<n;i++)
if(strcmp(stu[order[i]].name,s1)==0)
{ flag=1;
printf("该学生学号、姓名和 %d 门课成绩及平均成绩为:\n",M);
printf("%s %s ",stu[order[i]].code,stu[order[i]].name);
for(j=0;j<M;j++)
printf("%-4d",stu[order[i]].mark[j]);
printf(" %.2f",stu[order[i]].average);
printf("\n");
}
if(flag==0)
printf("该姓名不存在!\n"); break;
case 3:
printf("请输入要查询的学生的成绩:\n");
scanf("%f",&avr);
for(i=0;i<n;i++)
if(stu[order[i]].average<avr)
{ flag=1;
printf("该学生学号、姓名和 %d 门课成绩及平均成绩为:\n",M);
printf("%s %s ",stu[order[i]].code,stu[order[i]].name);
for(j=0;j<M;j++)
printf("%-4d",stu[order[i]].mark[j]);
printf(" %.2f",stu[order[i]].average);
printf("\n");
}
if(flag==0)
printf("低于该平均成绩的学生不存在!\n"); break;
case 4:return;
default:printf("请在1-4之间选择\n");
}
}
}
void sort() /*选择排序*/
{ int i,j,t,sum;
for(i=0;i<n;i++)
{ sum=0;
for(j=0;j<M;j++)
sum+=stu[order[i]].mark[j];
stu[order[i]].average=sum/3.0;
}
for(i=0;i<n-1;i++)/*共扫视n-1遍*/
for(j=i+1;j<n;j++)
if(stu[order[i]].average<stu[order[j]].average)
{/*交换名次*/
t=order[i];
order[i]=order[j];
order[j]=t;
}
printf("学生成绩按分数从高到低排列为:\n");
for(i=0;i<n;i++)
{ printf("%-17s %-17s ",stu[order[i]].code,stu[order[i]].name);
for(j=0;j<M;j++)
printf("%-4d",stu[order[i]].mark[j]);
printf(" %.2f\n",stu[order[i]].average);
}
}
void insert()
{ int i=n,j,flag;
printf("请输入待增加的学生数:\n");
scanf("%d",&m);
do
{ flag=1;
while(flag)
{ flag=0;
printf("请输入第 %d 个学生的学号:\n",i+1);
scanf("%s",stu[i].code);
for(j=0;j<i;j++)
if(strcmp(stu[i].code,stu[j].code)==0)
{ printf("已有该学号,请检查后重新录入!\n");
flag=1;
break; /*如有重复立即退出该层循环,提高判断速度*/
}
}
printf("请输入第 %d 个学生的姓名:\n",i+1);
scanf("%s",stu[i].name);
printf("请输入%d门课程的成绩:\n",M);
for(j=0;j<M;j++)
{ printf("course %d:",j+1);
scanf("%d",&stu[i].mark[j]);
}
if(flag==0)
{ order[i]=i;
i++;
}
}while(i<n+m);
n+=m;
printf("录入完毕!\n\n");
}
void del()
{ int i,j,k,flag=0;
char s1[CODELEN+1];
printf("请输入要删除学生的学号:\n");
scanf("%s",s1);
for(i=0;i<n;i++)
if(strcmp(stu[order[i]].code,s1)==0)
{ flag=1;
for(j=i;j<n-1;j++)
stu[order[j]]=stu[order[j+1]];
}
if(flag==0)
printf("该学号不存在!\n");
if(flag==1)
{ printf("删除成功,显示结果请选择菜单6\n");
n--;
}
}
void display()
{ int i,j;
printf("所有学生学号、姓名和成绩为:\n");
for(i=0;i<n;i++)
{
printf("%-17s%-17s ",stu[order[i]].code,stu[order[i]].name);
for(j=0;j<M;j++)
printf("%-4d",stu[order[i]].mark[j]);
printf(" %.2f",stu[order[i]].average);
printf("\n");
}
}
void save()
{ int i,j,k,flag=0;
FILE *fp;
fp=fopen("student.dat","w");
for(i=0;i<n;i++)
{ fprintf(fp,"%-17s%-17s ",stu[order[i]].code,stu[order[i]].name);
for(j=0;j<M;j++)
fprintf(fp,"%-4d",stu[order[i]].mark[j]);
fprintf(fp," %.2f",stu[order[i]].average);
fprintf(fp,"\n");
}
fclose(fp);
}
void menu()/* 界面 */
{ int num;
printf(" \n\n简易学生信息管理系统\n\n");
printf("*****系统功能菜单*****\n");
printf("----------------------\n");
printf("1.读入学生信息\n");
printf("2.查询学生信息\n");
printf("3.按成绩排序\n");
printf("4.增加学生信息\n");
printf("5.按学号删除信息\n");
printf("6.显示当前信息\n");
printf("7.保存当前学生信息\n");
printf("8.退出系统\n");
printf("----------------------\n");
printf("请选择菜单编号:");
scanf("%d",&num);
switch(num)
{
case 1:readfile();break;/*在主函数中调用子函数时,子函数不要带上类型,这和声明子函数不同*/
case 2:seek();break;
case 3:sort();break;
case 4:insert();break;
case 5:del();break;
case 6:display();break;
case 7:save();break;
case 8:k=0;break;
default:printf("请在1-8之间选择\n");
}
}
第3个回答 2009-02-22
//****************************************************************************
//**** 说明:密码所在的文件位于c盘,文件名为1.txt。
//**** 学生基本信息最好保存在C盘,文件名为student.txt。
//****************************************************************************
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <conio.h>
#define N 3
struct student
{
char name[10];
char no[10];
char sex;
int age;
char bnote[100];
};
void print(bool menu)//打印基本信息
{
if (!menu)
{
printf("学生基本信息录入 ,press 1\n");
}
else
{
printf("学生基本信息显示 ,press 2\n");
printf("学生基本信息保存 ,press 3\n");
printf("学生基本信息删除 ,press 4\n");
printf("学生基本信息修改 ,press 5\n");
printf("学生基本信息查询 ,press 6\n");
}
printf("退出学生信息系统 ,press 7\n");
}
bool Check(char pas[6])//密码验证
{
FILE *fp;
char ch;
char a[7]={" "};
int i = 0;
if ((fp=fopen("c:\\1.txt","r"))==NULL)
{
printf("打开文件失败!\n");
exit(0);
}
ch=fgetc(fp);
while (ch!=EOF&&i<6)
{
a[i] = ch;
ch=fgetc(fp);
i++;
}
a[6] = '\0';
if (!strcmp(pas,a))
{
return true;
}
else
{
printf("密码错误\n");
return false;
}
fclose(fp);
}
void GetInfo(struct student *arr,int n)//学生基本信息录入
{
for (int i = 0;i<n;i++)
{
printf("输入学生的基本信息:name no sex age bnote\n");
scanf("%s %s %c %d %s",arr[i].name,arr[i].no,&arr[i].sex,&arr[i].age,arr[i].bnote);
}
}
void Display(struct student* arr,int n)//学生基本信息显示
{
printf("学生信息: Name NO Sex age Note\n");
for (int i = 0;i<n;i++)
{
printf("%15s%15s%15c%15d%15s\n",arr[i].name,arr[i].no,arr[i].sex,arr[i].age,arr[i].bnote);
}
}
void Save(struct student* arr,int n)//学生基本信息保存,保存在c:\\student.txt
{
FILE * fp;
fp= fopen("c:\\student.txt","w+");
if (fp == NULL)
{
printf("文件不存在!\n");
exit(0);
}
fwrite(arr,sizeof(struct student)*n,n,fp);
fclose(fp);
}
void Modfiy(struct student* arr,int n)//学生基本信息修改
{
char number[10];
bool flag=false;
char pass[6];
printf("请输入密码:\n");
scanf("%s",pass);
if (Check(pass))
{
printf("修改学生信息:\n");
printf("请输入学号:\n");
scanf("%s",number);
for (int i =0;i<n;i++)
{
if (!strcmp(number,arr[i].no))
{
printf("infor: name no sex age note\n");
printf("%12s%12s%12c%12d%12s\n",arr[i].name,arr[i].no,
arr[i].sex,arr[i].age,arr[i].bnote);
printf("please input information:\n");
scanf("%s%s%c%d%s",arr[i].name,arr[i].no,&arr[i].sex,&arr[i].age,arr[i].bnote);
Save(arr,n);
flag = true;
}
}
if (flag == false)
{
printf("该学生不存在!:\n");
}
}
}
void Delete(struct student* arr,int n)//学生基本信息删除
{
char number[10];
bool flag=false;
printf("Delete information:\n");
printf("please input the no:\n");
scanf("%s",number);
for (int i =0;i<n;i++)
{
if (!strcmp(number,arr[i].no))
{
strcpy(arr[i].name," ");
strcpy(arr[i].no," ");
strcpy(arr[i].bnote," ");
arr[i].sex = ' ';
arr[i].age = 0;
Save(arr,n);
flag = true;
}
}
if (flag == true)
{
printf("该学生不存在!:\n");
}
}
void Search(struct student* arr,int n)//学生基本信息查询
{
int temp,i;
bool flag=false;
printf("---------------通过学号查询,press 1-------------\n");
printf("---------------通过姓名查询,press 2-----------\n");
printf("---------------通过性别查询,press 3------------\n");
printf("---------------通过年龄查询,press 4------------\n");
printf("---------------退出,press 5 ------------\n");
scanf("%d",&temp);
switch (temp)
{
case 1://按照学号查询
{
char num[10];
printf("请输入学号:\n");
scanf("%s",num);
for ( i =0;i<n;i++)
{
if (!strcmp(num,arr[i].no))
{
printf("%12s%12s%12c%12d%12s\n",arr[i].name,arr[i].no,
arr[i].sex,arr[i].age,arr[i].bnote);
flag = true;
}
}
if (!flag)
{
printf("该学生不存在.\n");
}
}
break;
case 2://按照名字查询
{
char num[10];
printf("please input name:\n");
scanf("%s",num);
for ( i =0;i<n;i++)
{
if (!strcmp(num,arr[i].name))
{
printf("%12s%12s%12c%12d%12s",arr[i].name,arr[i].no,
arr[i].sex,arr[i].age,arr[i].bnote);
flag = true;
}
}
if (!flag)
{
printf("该学生不存在.\n");
}
}
break;
case 3://按照性别查询
{
char ch;
printf("请输入性别:\n");
//scanf("%c",&ch);
ch = getch();
for ( i =0;i<n;i++)
{
if (ch == arr[i].sex)
{
printf("%12s%12s%12c%12d%12s\n",arr[i].name,arr[i].no,
arr[i].sex,arr[i].age,arr[i].bnote);
flag = true;
}
}
if (!flag)
{
printf("t该学生不存在.\n");
}
}
break;
case 4://按照年龄查询
{
char num_age;
printf("请输入年龄:\n");
scanf("%d",&num_age);
for ( i =0;i<n;i++)
{
if (num_age == arr[i].age)
{
printf("%12s%12s%12c%12d%12s\n",arr[i].name,arr[i].no,
arr[i].sex,arr[i].age,arr[i].bnote);
flag = true;
}
}
if (!flag)
{
printf("该学生不存在.\n");
}
}
break;
default:
break;
}
}
void main()
{
struct student arr[N];
char ps[6];
bool flag =false;
printf("请输入密码:\n");
scanf("%s",ps);
flag = Check(ps);
if (flag)
{
int select;
print(false);
scanf("%d",&select);
while (0<select && select <7 )
{
switch (select)
{
case 1:
GetInfo(arr,N);
print(true);
break;
case 2:
Display(arr,N);
print(true);
break;
case 3:
Save(arr,N);
print(true);
break;
case 4:
Delete(arr,N);
print(true);
break;
case 5:
Modfiy(arr,N);
print(true);
break;
case 6:
Search(arr,N);
print(true);
break;
default:
break;
}
printf("请选择:\n");
scanf("%d",&select);
}
}
}
//有什么问题9点的时候问我本回答被提问者采纳