帮忙用C语言做一个程序>.<~~~~

作者&投稿:书屈 (联系方式在网页底部的电邮联系)
有没有C语言高手帮我做一个程序~

#include
#include
#include
#include
typedef struct students /*学生信息结构体(info.dat)*/
{
char classes[6];//所在班级名称
int numb; //班内学号(在班级内自动生成学号,取最大值加1)
char name[20]; //姓名
float avgscore; //结业平均成绩(初始值为0)
char chr; //标记该信息是否为输出项[即是否已被(伪)删除](默认值为'1',标记为'2'表示已被删除)
}stuinfo;
typedef struct scores /*学生成绩结构体(score.dat)*/
{
char classes[6];//所在班级名称,输入格式如:s1154
int numb; //班内学号
float c_score; //C语言成绩
float sql_score;//SQL语言成绩
float vb_score; //VB语言成绩
char chr; //标记该信息是否为输出项[即是否已被(伪)删除](默认值为'1',标记为'2'表示已被删除)
}stuscore;
FILE *fpi; //指向文件info.dat
FILE *fps; //指向文件score.dat
void opt_1 ();
void opt_2 ();
void opt_3 ();
void opt_4 ();
void opt_5 ();//选项5:按 [班级] 查询学生基本信息
void opt_6 ();
void opt_7 ();
//void opt_8 ();测试 ( 测试文件 info.dat 和文件 score.dat 中的信息)






void main ()
{
char ch; //选项标记
for(;;)
{
system("cls"); //每次循环开始都清屏
printf("**********************
");
printf("* 学生信息管理 *
");
printf("**********************

");
printf(" ——————————————————
");
printf(" 1. 录入学生基本信息
");
printf(" 2. 录入成绩信息
");
printf(" ----------------------------------
");
printf(" 3. 修改学生成绩
");
printf(" ----------------------------------
");
printf(" 4. 删除学生全部信息
");
printf(" ----------------------------------
");
printf(" 5. 按 [班级] 查询学生基本信息
");
printf(" 6. 按 [班级] 查询成绩
");
printf(" 7. 显示通过考试的学生信息
");
printf(" ----------------------------------
");
printf(" 8. 退出
");
printf(" ——————————————————

");
printf("请输入您的选择(数字1-8):");
for(;;) //循环直到合法输入(1-8)
{
ch=getche();
if( ch>='1' && ch<='8' )
break;
printf("请输入您的选择(数字1-8): \b"); //每次不合法输入后,都使屏幕外观不发生改变
}
getch(); //等待…(即:选择后,按任意键才能跳到下一功能界面)
switch (ch)
{
case '1' :
opt_1 ();
break;
case '2' :
opt_2 ();
break;
case '3' :
opt_3 ();
break;
case '4' :
opt_4 ();
break;
case '5' :
opt_5 ();
break;
case '6' :
opt_6 ();
break;
case '7' :
opt_7 ();
break;
default:
system("cls");
// opt_8 ();
printf("



程序退出。谢谢使用!




");
getch();
exit(0);
}
}
}

void opt_1 ()
{
char ch; //标记(是否继续输入)
stuinfo tempi,stui; //temp用于存放从info.dat中读取的一个学生信息;stui存放新输入的学生信息
stui.avgscore=0; //新学生信息的平均分要默认为0
stui.chr='1'; //标记新信息为输出项[即未被(伪)删除](默认值为'1',标记为'2'表示已被删除)
system("cls");
if((fpi=fopen("info.dat","ab+"))==NULL) //以追加方式打开
{
printf("info.dat文件打开失败!
程序结束!
");
exit(1);
}
printf("录入学生基本信息");
for(;;)
{
printf("

请输入学生基本信息
");
printf("学生所在班级名称:");
scanf("%5s",stui.classes); //接收班级名称
fflush(stdin);
rewind(fpi); //info.dat文件内部指针归零(指向文件开头)
stui.numb=1; //新学生信息,其班内学号默认为 1
for(;;) //用循环逐一读取单个学生信息
{
if( fread(&tempi,sizeof(stuinfo),1,fpi) == 0 )//判断是否到达文件末尾,如果到达就跳出循环
break;
if( (strcmp(stui.classes,tempi.classes)) == 0 ) //判断班级 相同?
stui.numb=tempi.numb+1; //stu.numb(新学号)=temp.numb(读取学号)+1;
}
printf("班内学号:%d
",stui.numb);
printf("学生姓名:");
scanf("%19s",stui.name);
fflush(stdin);
// fseek(fpi,0,2); //使文件指针到末尾
fwrite(&stui,sizeof(stuinfo),1,fpi); //把该记录写到info.dat文件最后
printf("
继续输入吗?:");
for(;;)
{
ch=getche();
if( ch=='Y' || ch=='y' || ch=='N' || ch=='n' ) //只有输入正确('Y','N','y','n')才能跳出循环
break;
printf("继续输入吗?: \b");
}
if( ch=='Y' || ch=='y' ) //继续输入下一个
continue;
else
break; //结束循环
}
fclose(fpi);
printf("

按任意键返回……");
getch(); //按任意键跳回主菜单
}
void opt_2 ()
{
char ch; //标记(是否继续输入)
long int flag; //标记(是否为应该输入的记录);如应该输入,顺便记录info.dat文件内指针位置
stuinfo tempi; //tempi用于存放从info.dat中读取的一个学生信息
stuscore temps,stus; //temps用于存放从score.dat中读取的一个成绩信息;stus存放新输入的成绩信息
stus.chr='1';
system("cls");
if((fpi=fopen("info.dat","rb+"))==NULL) //按“可更改已有信息”方式打开
{
printf("info.dat文件打开失败!
程序结束!
");
exit(1);
}
if((fps=fopen("score.dat","ab+"))==NULL)
{
printf("score.dat文件打开失败!
程序结束!
");
exit(1);
}
printf("录入学生成绩
");
printf("
请先输入班级名称:");
scanf("%5s",stus.classes);
fflush(stdin);
for(;;)
{
printf("

请输入学号:");
scanf("%d",&stus.numb);
fflush(stdin);
rewind(fpi);
rewind(fps);
for(;;) //循环逐一读取单个学生信息(info.dat)
{
if( fread(&tempi,sizeof(stuinfo),1,fpi) == 0 ) //判断是否到达文件末尾,如果到达就跳出循环
{
flag=-1;
break; //从此跳出,证明stus和info.dat中的任意一个都不相同(同一个学生)
}
if(strcmp(stus.classes,tempi.classes)==0 && stus.numb==tempi.numb && tempi.chr=='1')//判断班级和学号 都相同? ; 并且此记录是否真正存在(标记'1'表示真正存在)?
{
flag=ftell(fpi)-sizeof(stuinfo); //记录该学生在文件中的位置,以便覆盖此记录(平均成绩有变动)
break; //循环如果能从此处跳出,证明stus和tempi相同(同一个学生)
}
}
for(;;) //循环逐一读取单个学生信息(score.dat)
{
if( fread(&temps,sizeof(stuscore),1,fps) == 0 )//判断是否到达文件末尾,如果到达就跳出循环
break; //从此跳出,证明score.dat中尚没有stus的成绩记录
if( (strcmp(stus.classes,temps.classes))==0 && stus.numb==temps.numb )//判断班级和学号是否都相同
{
flag=-1;
break; //从此跳出,证明score.dat中已有stus的成绩记录(即:已有该学生的成绩记录了)
}
}
if(flag==-1)
{
printf("info.dat文件中没有学号为%d的学生信息,或者score.dat文件中已存在该学号学生的成绩!",stus.numb);
break;
}
for(;;)
{
printf("请输入C语言成绩:");
scanf("%f",&stus.c_score);
if( stus.c_score>=0.0 && stus.c_score<=100.0 ) //要求成绩在 0-100 之间
break;
printf("输入不正确!
");
}
for(;;)
{
printf("请输入SQL语言成绩:");
scanf("%f",&stus.sql_score);
if( stus.sql_score>=0.0 && stus.sql_score<=100.0 )
break;
printf("输入不正确!
");
}
for(;;)
{
printf("请输入VB语言成绩:");
scanf("%f",&stus.vb_score);
if( stus.vb_score>=0.0 && stus.vb_score<=100.0 )
break;
printf("输入不正确!
");
}
tempi.avgscore=(stus.c_score+stus.sql_score+stus.vb_score)/3; //变动平均分(原值为:0)
fseek(fpi,flag,0); //info.dat内部文件指针跳到flag处
fwrite(&tempi,sizeof(stuinfo),1,fpi); //覆盖info.dat中的原记录(因为平均分有变动)
fwrite(&stus,sizeof(stuscore),1,fps); //把新成绩信息记录到score.dat文件中
printf("继续输入吗?:");
for(;;)
{
ch=getche();
if( ch=='Y' || ch=='y' || ch=='N' || ch=='n' )
break;
printf("继续输入吗?: \b");
}
if( ch=='Y' || ch=='y' )
continue;
else
break;
}
fcloseall();
printf("

按任意键返回……");
getch();
}

void opt_3 ()
{
char ch; //标记(是否继续输入)
long int flag1,flag2; //同上 ( flag1—info.dat flag2—score.dat )
stuinfo tempi; //用于存放从info.dat中读取的一个学生信息
stuscore temps,stus; //temps用于存放从score.dat中读取的一个成绩信息;stus存放新输入的成绩信息
system("cls");
if((fpi=fopen("info.dat","rb+"))==NULL)
{
printf("info.dat文件打开失败!
程序结束!
");
exit(1);
}
if((fps=fopen("score.dat","rb+"))==NULL)
{
printf("score.dat文件打开失败!
程序结束!
");
exit(1);
}
printf("修改学生成绩
");
printf("
请先输入要修改的班级名称:");
scanf("%5s",stus.classes);
fflush(stdin);
for(;;)
{
printf("

请输入学号:");
scanf("%d",&stus.numb);
fflush(stdin);
rewind(fpi);
rewind(fps);
for(;;) //循环逐一读取单个学生信息(info.dat)
{
if( fread(&tempi,sizeof(stuinfo),1,fpi) == 0 ) //判断是否到达文件末尾,如果到达就跳出循环
{
flag1=-1;
break;
}
if(strcmp(stus.classes,tempi.classes)==0 && stus.numb==tempi.numb && tempi.chr=='1')//判断班级和学号 都相同?
{
flag1=ftell(fpi)-sizeof(stuinfo);//记录该学生在文件中的位置,以便覆盖此记录(平均分有变动)
break;
}
}
for(;;) //循环逐一读取单个学生信息(score.dat)
{
if( fread(&temps,sizeof(stuscore),1,fps) == 0 )//判断是否到达文件末尾,如果到达就跳出循环
{
flag2=-1;
break;
}
if(strcmp(stus.classes,temps.classes)==0 && stus.numb==temps.numb )//判断班级和学号是否都相同
{
flag2=ftell(fps)-sizeof(stuscore);//记录该学生在文件中的位置,以便覆盖此记录(成绩有变动)
break; //循环如果能从此处跳出,证明stus和temps相同(同一个学生)
}
}
if(flag1==-1)
{
printf("info.dat文件中没有学号为%d的学生信息!",stus.numb);
break;
}
else if(flag2==-1)
{
printf("score.dat文件中没有该学号为%d的学生的成绩信息!",stus.numb);
break;
}
for(;;)
{
printf("请重新输入C语言成绩:");
scanf("%f",&stus.c_score);
if( stus.c_score>=0.0 && stus.c_score<=100.0 )
break;
printf("输入不正确!
");
}
for(;;)
{
printf("请重新输入SQL语言成绩:");
scanf("%f",&stus.sql_score);
if( stus.sql_score>=0.0 && stus.sql_score<=100.0 )
break;
printf("输入不正确!
");
}
for(;;)
{
printf("请重新输入VB语言成绩:");
scanf("%f",&stus.vb_score);
if( stus.vb_score>=0.0 && stus.vb_score<=100.0 )
break;
printf("输入不正确!
");
}
tempi.avgscore=(stus.c_score+stus.sql_score+stus.vb_score)/3; //变动平均分
fseek(fpi,flag1,0); //info.dat内部文件指针跳到flag1处
fwrite(&tempi,sizeof(stuinfo),1,fpi); //覆盖info.dat中的原记录(因为平均分有变动)
fseek(fps,flag2,0); //score.dat内部文件指针跳到flag2处
fwrite(&stus,sizeof(stuscore),1,fps); //覆盖score.dat中的原记录(因为成绩有变动)
printf("成绩修改成功! 继续修改学生成绩吗?:");
for(;;)
{
ch=getche();
if( ch=='Y' || ch=='y' || ch=='N' || ch=='n' )
break;
printf("继续修改学生成绩吗?: \b");
}
if( ch=='Y' || ch=='y' )
continue;
else
break;
}
fcloseall();
printf("

按任意键返回……");
getch();
}

void opt_4 ()
{
char ch; //标记(是否继续输入)
long int flag1,flag2; //同上 ( flag1—info.dat flag2—score.dat )
char clas[6]; //用于存放将要删除的班级名称
int id; //用于存放将要删除的班内学号
stuinfo tempi; //用于存放从info.dat中读取的一个学生信息
stuscore temps; //用于存放从score.dat中读取的一个成绩信息
system("cls");
if((fpi=fopen("info.dat","rb+"))==NULL)
{
printf("info.dat文件打开失败!
程序结束!
");
exit(1);
}
if((fps=fopen("score.dat","rb+"))==NULL)
{
printf("score.dat文件打开失败!
程序结束!
");
exit(1);
}
printf("删除学生全部信息
");
printf("
请先输入要删除学生的班级名称:");
scanf("%5s",clas);
fflush(stdin);
rewind(fpi);
rewind(fps);
for(;;)
{
printf("

请输入学号:");
scanf("%d",&id);
fflush(stdin);
for(;;)//循环逐一读取单个学生信息(info.dat)
{
if( fread(&tempi,sizeof(stuinfo),1,fpi) == 0 )//判断是否到达文件末尾,如果到达就跳出循环
{
flag1=-1;
break;
}
if( (strcmp(clas,tempi.classes))==0 && id==tempi.numb && tempi.chr=='1')//判断班级和学号是否都相同
{
flag1=ftell(fpi)-sizeof(stuinfo);
tempi.chr='2';
break;
}
}
if(flag1==-1)
{
printf("info.dat文件中没有学号为%d的学生信息!",id);
break;
}
else
{
fseek(fpi,flag1,0);
fwrite(&tempi,sizeof(stuinfo),1,fpi);
}
for(;;)//循环逐一读取单个学生信息(score.dat)
{
if( fread(&temps,sizeof(stuscore),1,fps) == 0 )//判断是否到达文件末尾,如果到达就跳出循环
{
flag2=-1;
break;
}
if( (strcmp(clas,temps.classes))==0 && id==temps.numb )//判断班级和学号是否都相同
{
flag2=ftell(fps)-sizeof(stuscore);
temps.chr='2';
break;
}
}
if(flag2!=-1)
{
fseek(fps,flag2,0);
fwrite(&temps,sizeof(stuscore),1,fps);
}
printf("删除操作成功.

");
printf("继续删除学生信息吗?:");
for(;;)
{
ch=getche();
if( ch=='Y' || ch=='y' || ch=='N' || ch=='n' )
break;
printf("继续删除学生信息吗?: \b");
}
if( ch=='Y' || ch=='y' )
continue;
else
break;
}
fcloseall();
printf("

按任意键返回……");
getch();
}

void opt_5 ()
{
char clas[6]; //用于存放班级名称
int flag=-1; //此班级如果没有记录(标记-1);如果有记录(标记1)
stuinfo tempi; //用于存放从info.dat中读取的一个学生信息
system("cls");
if((fpi=fopen("info.dat","rb+"))==NULL)
{
printf("info.dat文件打开失败!
程序结束!
");
exit(1);
}
printf("按 [班级] 查询学生信息
");
printf("
请输入要查询的班级名称:");
scanf("%5s",clas);
fflush(stdin);
printf("
学号姓 名 平均成绩
");
for(;;)//循环逐一读取单个学生信息(info.dat)
{
if( fread(&tempi,sizeof(stuinfo),1,fpi) == 0 )//判断是否到达文件末尾,如果到达就跳出循环
break;
if( (strcmp(clas,tempi.classes))==0 && tempi.chr=='1' )//判断班级是否相同
{
flag=1; //只要该班级有记录,flag 就被赋值为1
printf("%3d %-12s%6.2f
",tempi.numb,tempi.name,tempi.avgscore); //打印此记录
}
}
if(flag==-1) //表示一条记录都没有打印,即没有该班级的学生信息记录
printf("
该班级没有任何记录!
");
fcloseall();
printf("
按任意键返回……");
getch();
}

void opt_6 ()
{
char clas[6]; //用于存放班级名称
int flag=-1; //此班级如果没有记录(标记-1);如果有记录(标记1)
stuscore temps; //用于存放从score.dat中读取的一个学生信息
system("cls");
if((fps=fopen("score.dat","rb+"))==NULL)
{
printf("score.dat文件打开失败!
程序结束!
");
exit(1);
}
printf("按 [班级] 查询成绩
");
printf("
请输入要查询的班级名称:");
scanf("%5s",clas);
fflush(stdin);
printf("
学号 c成绩 spl成绩 vb成绩
");
for(;;)//循环逐一读取单个学生信息(score.dat)
{
if( fread(&temps,sizeof(stuscore),1,fps) == 0 )//判断是否到达文件末尾,如果到达就跳出循环
break;
if( (strcmp(clas,temps.classes))==0 && temps.chr=='1' )//判断班级是否相同
{
flag=1;
printf("%3d %5.1f %5.1f %5.1f
",temps.numb,temps.c_score,temps.sql_score,temps.vb_score);
}
}
if(flag==-1) //表示一条记录都没有打印,即没有该班级的学生成绩记录
printf("
该班级没有任何记录!
");
fcloseall();
printf("
按任意键返回……");
getch();
}

void opt_7 ()
{
int flag=-1; //如果没有记录(标记-1);如果有记录(标记1)
stuinfo tempi; //用于存放从info.dat中读取的一个学生信息
system("cls");
if((fpi=fopen("info.dat","rb+"))==NULL)
{
printf("info.dat文件打开失败!
程序结束!
");
exit(1);
}
printf("显示通过考试的学生信息
");
printf("
班级 学号姓 名 平均成绩
");
for(;;)//循环逐一读取单个学生信息(info.dat)
{
if( fread(&tempi,sizeof(stuinfo),1,fpi) == 0 ) //判断是否到达文件末尾,如果到达就跳出循环
break;
if( tempi.avgscore>=60 && tempi.chr=='1' ) //平均分 >=60 并且该记录未被删除(标记为'1')
{
flag=1; //只要有记录,flag 就被赋值为1
printf("%-7s%3d %-12s%6.2f
",tempi.classes,tempi.numb,tempi.name,tempi.avgscore); //打印此记录
}
}
if(flag==-1)
printf("
没有任何记录!
");
fcloseall();
printf("
按任意键返回……");
getch();
}

/*
void opt_8 () //测试 ( 测试文件 info.dat 和文件 score.dat 中的信息)
{
stuinfo tempi; //用于存放从info.dat中读取的一个学生信息
stuscore temps; //用于存放从score.dat中读取的一个学生成绩
system("cls");
if((fpi=fopen("info.dat","rb+"))==NULL)
{
printf("info.dat文件打开失败!
程序结束!
");
exit(1);
}
if((fps=fopen("score.dat","rb+"))==NULL)
{
printf("score.dat文件打开失败!
程序结束!
");
exit(1);
}
printf("
info.dat 文件中的学生信息
");
printf("
%-7s%-6s%-10s%-10s%s
","班级","学号","姓名","平均成绩","标记(1:正常;2:已删除)");
for(;;)//循环逐一读取单个学生信息(info.dat)
{
if( fread(&tempi,sizeof(stuinfo),1,fpi) == 0 )//判断是否到达文件末尾,如果到达就跳出循环
break;
printf("
%-7s%3d %-10s%7.2f %3c",tempi.classes,tempi.numb,tempi.name,tempi.avgscore,tempi.chr); //打印此记录
}
printf("


score.dat 文件中的学生成绩信息
");
printf("
%-7s%-6s%-7s%-9s%-8s%s
","班级","学号","c成绩","spl成绩","vb成绩","标记(1:正常;2:已删除)");
for(;;)//循环逐一读取单个学生信息(score.dat)
{
if( fread(&temps,sizeof(stuscore),1,fps) == 0 )//判断是否到达文件末尾,如果到达就跳出循环
break;
printf("
%-7s%3d %5.1f %6.1f %5.1f %3c",temps.classes,temps.numb,temps.c_score,temps.sql_score,temps.vb_score,temps.chr);
}
fcloseall();
getch();
}*/

到我的空间里看看!《学生成绩管理系统》会给你答案!

#include <stdio.h>
#include <stdlib.h>

void main()
{
char *one_line;
char ci[20];
char ju[12][20];
unsigned char cai;
char yes[4];
int n;
int i,j,k,l,LL;
one_line = (char*)malloc(300*sizeof(char));

Lab0:;
printf("Input Word String: ");
gets(one_line);
LL = strlen(one_line);
k = sscanf(one_line, "%s %s %s %s %s %s %s %s %s %s %s %s",
ju[0],ju[1],ju[2],ju[3],ju[4],ju[5],ju[6],ju[7],ju[8],ju[9],ju[10],ju[11]);
n = k;
// printf("number of words: %d\n",n);
Lab_input_word:;
printf("Input Word: ");
scanf("%s", &ci[0]);
l = strlen(ci);
for (i=0;i<n;i++){
if (strcmp(ci,ju[i])==0){
for (j=0;j<l;j++) printf("-");
printf("\n");
goto Lab_chance;
}; // if
}; // for
printf("There is no the Word %s in word string\n",ci);
goto Lab_input_word;
Lab_chance:;
cai = getchar();
for (i=10;i>0;i--){
printf("Input Char(Chance %d): ",i);
cai = getchar();
for (k=0;k<LL;k++){
if (one_line[k] != cai) {printf("-");}else {printf("%c",cai);};
};
printf("\n");
cai = getchar();
}; // i

printf("Play again? Yes or No\n");
scanf("%s",&yes[0]);
if (strncmp(yes,"y",1) == 0 || strncmp(yes,"Y",1) == 0) goto Lab0;
exit(0);
}

L_o_o_n_i_e 已经回答了,我就不答了。

#include <string.h>
楼上答的不错,就是忘了一个头文件

相关视频

求C语言大神帮忙编写一个程序,按要求写出来。
printf("\\n转置后的矩阵为:\\n");for (i=0; i<n; i++){ for (j=0; j<m; j++){ printf("%5d ", arrB[i][j]);} putchar('\\n');} return 0;} void rotate( int (*arrA)[MAX], int (*arrB)[MAX], int m, int n){ int i = 0;int j = 0;for( i=0; i<...

帮忙用C语言做一个程序>.<~~~
if (one_line[k] != cai) {printf("-");}else {printf("%c",cai);};};printf("\\n");cai = getchar();}; \/\/ i printf("Play again? Yes or No\\n");scanf("%s",&yes[0]);if (strncmp(yes,"y",1) == 0 || strncmp(yes,"Y",1) == 0) goto Lab0;exit(0);} ...

用C语言编写一个计算最大值的程序
C程序代码如下:解析:1、首先定义a,b,c,max四个整型变量,并输入a,b,c三个数;2、定义最大...

用C语言编写一个程序,只要符合要求我继续加分。要详细的我黏贴一下就好...
下列程序,用TC2.0编译、调试成功。include <stdio.h> void main(void){ unsigned char i = 0, IN_temp, IN_num[255], IN_amount[10] = {0,0,0,0,0,0,0,0,0,0};float Total = 0, Aver;while (1) { printf("\\n\\nPlease Input 0~9, Others is Exit.\\n\\n");scanf("...

如何用c语言编写一个输出结果为1 3 5 7……99的程序
include <stdio.h>void main(){int i,n=0;for(i=1;i<=50;i++){printf("%-4d",i*2-1);n++;if(n%10==0)printf("\\n");}} 运行结果截图:

用c语言写程序 给定某个学生三门课成绩,求其总分和平均分。
在C语言中编写一个程序,用于计算一个学生在三门课程中的总分和平均分,可以按照以下步骤进行。首先,我们需要引入标准输入输出库,这可以通过在程序开头添加#include"stdio.h"来实现。接下来定义一个main函数,这是程序的入口。在main函数中,我们需要定义三个整型变量a, b, c,它们分别用于存储三门...