这道C语言编程题谁会做?急需!!!悬赏15分

一、编制页面程序:
程序运行后应该不断提示用户可以进行的操作。比如登陆界面、学籍管理操作(添加、删除、修改、查询选择),选择是否继续等等。
二、程序功能:
1、提示用户输入某个班的学生信息(姓名、学号、C语言成绩、英语成绩),直到用户决定输入,并将信息写入文件;
2、允许用户在成绩清单(保存在文件中)中查询;
3、允许用户在成绩清单(保存在文件中)的信息进行修改;
4、允许用户删除成绩清单(保存在文件中)中的学生信息。
三、程序结构
程序应有多个函数,至少添加、删除、修改、查询操作应为独立的函数,当用户选择了某种操作后调用对应的函数。
四、编程要求
1、必须用链表结构体数组来临时存储学生学籍记录
2、必须用文件保存学生学籍记录
3、有清楚的操作界面
4、给出完整的源程序

你看看我以前写的这个,应该基本符合吧,你改改
#include<time.h>
#include<conio.h>
#include<stdio.h>
#include<string.h>
#include<malloc.h>

#define L 100
#define M (struct stu *)malloc(sizeof(struct stu))

FILE *p;
FILE *q;
int i;
int tn;
char pw[L]="l";
float tm,chi,eng,math,phi,che,bio;
struct achi
{
float chi;
float eng;
float math;
float phi;
float bio;
float che;
};
struct stu
{
int age;
int num;
char name[L];
struct achi mark;
struct stu *lt;
struct stu *rt;
};

int chk();
int chf();
int pass();
void fj();
void pr();
void fd();
void cg();
void add();
void del();
void cpass();
void marks();
void choose();
void ge_t(struct stu *);
void plus(struct stu *);
void fprin(struct stu *);
void prin(struct stu *);
void dele(struct stu *,int);
void chge(struct stu *,int);
struct stu *got();
struct stu *rad(struct stu *,int);
struct stu *iad(struct stu *,int);

void ge_t(struct stu *gen)
{
fscanf(p,"%s",gen->name);
fscanf(p,"%d",&gen->age);
fscanf(p,"%f",&gen->mark.chi);
fscanf(p,"%f",&gen->mark.eng);
fscanf(p,"%f",&gen->mark.math);
fscanf(p,"%f",&gen->mark.phi);
fscanf(p,"%f",&gen->mark.che);
fscanf(p,"%f",&gen->mark.bio);
}
int chf()
{
char a;
fscanf(p,"%c",&a);
return feof(p);
}
void fj()
{
int i;
printf("1:关机\n2:重启\n");

if((int)(i=getch())==49)system("shutdown -s");
else system("shutdown -r");
}
void marks()
{

struct stu *gen;
tn=0;
tm=chi=eng=math=phi=che=bio=0.0;
gen=got();
plus(gen);
system("cls");
printf("总人数:%d\n语文平均分:%.1f\n英语平均分:%.1f\n数学平均分:%.1f\n物理平均分:%.1f\n化学平均分:%.1f\n生物平均分:%.1f\n总均分:%.1f\n",tn,chi/tn,eng/tn,math/tn,phi/tn,che/tn,bio/tn,tm/tn);
printf("按任意键返回菜单");
getch();
free(gen);
choose();
}
void plus(struct stu *gen)
{

if(gen->lt!=NULL)plus(gen->lt);
if(gen!=NULL)
{
tn+=1;
tm+=(gen->mark.bio+gen->mark.che+gen->mark.chi+gen->mark.eng+gen->mark.math+gen->mark.phi);
chi+=gen->mark.chi;
eng+=gen->mark.eng;
math+=gen->mark.math;
phi+=gen->mark.phi;
che+=gen->mark.che;
bio+=gen->mark.bio;
}
if(gen->rt!=NULL)plus(gen->rt);
}
void cpass()
{
char a[100];
int n=2;

printf("输入旧密码");
scanf("%s",a);
if(!strcmp(a,pw))
{
printf("输入新密码");
scanf("%s",pw);
printf("修改成功,按任意键返回");
}else {printf("输入错误,按任意键退出");getch();free(a);exit(0);}
free(a);
getch();
choose();
}
void chge(struct stu *gen,int num)
{
if(gen!=NULL)
{
chge(gen->lt,num);
if(gen->num==num)
{
int n=1;
loop:system("cls");
printf("选择修改项目");
printf("1:学号 2:姓名 3:年龄 4:语文成绩 5:英语成绩 6:数学成绩 7:物理成绩 8:化学成绩 9:生物成绩\n");
switch((int)(n=getch()))
{
case 49:printf("输入新学号");scanf("%d",&gen->num);break;
case 50:printf("输入新姓名");scanf("%s",gen->name);break;
case 51:printf("输入新年龄");scanf("%d",&gen->age);break;
case 52:printf("输入新成绩");scanf("%d",&gen->mark.chi);break;
case 53:printf("输入新成绩");scanf("%d",&gen->mark.eng);break;
case 54:printf("输入新成绩");scanf("%d",&gen->mark.math);break;
case 55:printf("输入新成绩");scanf("%d",&gen->mark.phi);break;
case 56:printf("输入新成绩");scanf("%d",&gen->mark.che);break;
case 57:printf("输入新成绩");scanf("%d",&gen->mark.bio);break;
case 27:n=0;break;
default:printf("输入错误,按任意键重新输入");getch();goto loop;
}
if(n)goto loop;
}
chge(gen->rt,num);
}
}
void pr()
{
struct stu *gen;

gen=got();
prin(gen);
free(gen);
fclose(p);
getch();
choose();
}

void cg()
{
struct stu *gen;
int num;

gen=got();
q=fopen("e:\\学生.stu","w");
printf("输入需要修改的学号\n");
scanf("%d",&num);
chge(gen,num);
fprin(gen);
free(gen);
fclose(q);
choose();
}
void dele(struct stu *gen,int num)
{
if(gen!=NULL)
{
dele(gen->lt,num);
if(gen->num==num){gen->num=0;i=1;}
dele(gen->rt,num);
}
}
void del()
{
struct stu *gen=NULL;
int num;

gen=got();
q=fopen("e:\\学生.stu","w");
loop:system("cls");
printf("输入需要删除的学号");
scanf("%d",&num);
dele(gen,num);
if(!i)
{printf("删除失败,无此学生信息,按任意键重新输入");
getch();goto loop;}
fprin(gen);
fclose(q);
free(gen);
choose();
}
void fprin(struct stu *gen)
{
if(gen!=NULL)
{
fprin(gen->lt);
if(gen->num!=0)
{
if(0)
{
printf("%d",gen->num);
getch();}
fprintf(q,"%d ",gen->num);
fprintf(q,"%s ",gen->name);
fprintf(q,"%d ",gen->age);
fprintf(q,"%.1f ",gen->mark.chi);
fprintf(q,"%.1f ",gen->mark.eng);
fprintf(q,"%.1f ",gen->mark.math);
fprintf(q,"%.1f ",gen->mark.phi);
fprintf(q,"%.1f ",gen->mark.che);
fprintf(q,"%.1f\n",gen->mark.bio);
}
fprin(gen->rt);
}
}
void add()
{
struct stu *gen;
int num=-1;

if(chf())
{
printf("数据库空,按任意键开始输入");
getch();
q=fopen("e:\\学生.stu","w");
printf("输入添加学号");
scanf("%d",&num);
while(num!=0)
{
system("cls");
gen=iad(gen,num);
printf("输入添加学号");
scanf("%d",&num);
}
}else{
gen=got();
q=fopen("e:\\stu\\学生.stu","w");
printf("输入添加学号");
scanf("%d",&num);
while(num!=0)
{
system("cls");
gen=iad(gen,num);
printf("输入添加学号");
scanf("%d",&num);

}
}
fprin(gen);
free(gen);
fclose(q);
choose();
}
void fd()
{
int n;
struct stu *fi;

rewind(p);
printf("输入查找学号");
scanf("%d",&n);
fi=M;
while(!feof(p))
{
fscanf(p,"%d",&fi->num);
ge_t(fi);
if(fi->num==n)
{
system("cls");
printf("%d %s %d %.1f %.1f %.1f %.1f %.1f %.1f\n",fi->num,fi->name,fi->age,fi->mark.chi,fi->mark.eng,fi->mark.math,fi->mark.phi,fi->mark.che,fi->mark.bio);
printf("按任意键返回菜单");
getch();
free(fi);
choose();
}
}
printf("无此生信息");
printf("按任意键返回菜单");
getch();
free(fi);
free(&n);
choose();

}
void prin(struct stu *gen)
{
if(gen!=NULL)
{
prin(gen->lt);
printf("%d %s %d %.1f %.1f %.1f %.1f %.1f %.1f\n",gen->num,gen->name,gen->age,gen->mark.chi,gen->mark.eng,gen->mark.math,gen->mark.phi,gen->mark.che,gen->mark.bio);
prin(gen->rt);
}
}
struct stu *got()
{
struct stu *gen=NULL;
int num;

rewind(p);
while(!feof(p))
{
fscanf(p,"%d",&num);
gen=rad(gen,num);
}
return(gen);
}
struct stu *rad(struct stu *gen,int num)
{
if(gen==NULL)
{
gen=M;
gen->num=num;
ge_t(gen);
gen->lt=NULL;
gen->rt=NULL;
}
else if(gen->num==num)return gen;
else if(gen->num>num)gen->lt=rad(gen->lt,num);
else gen->rt=rad(gen->rt,num);

return gen;
}
struct stu *iad(struct stu *gen,int num)
{
if(gen==NULL)
{
gen=M;
gen->num=num;
system("cls");
printf("输入姓名");
scanf("%s",gen->name);
system("cls");
printf("输入年龄");
scanf("%d",&gen->age);
system("cls");
printf("输入成绩");
scanf("%f %f %f %f %f %f",&gen->mark.chi,&gen->mark.eng,&gen->mark.math,&gen->mark.phi,&gen->mark.che,&gen->mark.bio);
gen->lt=NULL;
gen->rt=NULL;
}
else if(gen->num==num)
{system("cls");
printf("该生已存在按任意键继续输入");
system("cls");}
else if(gen->num>num)gen->lt=iad(gen->lt,num);
else if(gen->num<num)gen->rt=iad(gen->rt,num);
return gen;
}
void choose()
{
int i;
time_t a;

loop:a=time(NULL);
system("cls");
printf(" *********************菜单********************\n");
printf(" 1:查找信息\n 2:加入信息\n");
printf(" 3:删除信息\n 4:修改信息\n 5:成绩信息\n 6:输出所有信息\n");
printf(" 7:附加功能\n ESC:退出\n");
printf(" 现在时间:%s",ctime(&a));
switch((int)(i=getch()))
{
case 49:system("cls");fd();break;
case 50:system("cls");add();break;
case 51:system("cls");del();break;
case 52:system("cls");cg();break;
case 53:system("cls");marks();break;
case 54:system("cls");pr();break;
case 55:system("cls");fj();break;
case 27:system("cls");exit(0);break;
default :printf("输入无效,按任意键重新输入");getch();goto loop;
}
}
int pass()
{
char n[L];
printf("输入密码");
scanf("%s",n);
return !strcmp(pw,n);
}
int main()
{
int n=2;

loop:if(!pass())
{ if(!n)exit(0);
printf("错误,还有%d次输入机会,按任意键确定",n--);
goto loop;
}
if((p=fopen("e:\\学生.stu","r"))==NULL)
{
printf("文件错误");
getch();
exit(0);
}
p=fopen("e:\\学生.stu","r+");
system("title 学生管理V2.0");
choose();
getch();
}
初三的时候写的,不好的地方请指出来
温馨提示:内容为网友见解,仅供参考
第1个回答  2008-09-13
网上可以找找 有很多类似的这种题
第2个回答  2008-09-13
分太少了点!
第3个回答  2008-09-13
你要求的性价比太高
第4个回答  2008-09-13
寒,程序量太大了

这道C语言编程题谁会做?急需!!!悬赏15分
一、编制页面程序:程序运行后应该不断提示用户可以进行的操作。比如登陆界面、学籍管理操作(添加、删除、修改、查询选择),选择是否继续等等。二、程序功能:1、提示用户输入某个班的学生信息(姓名、学号、C语言成绩、英语成绩),直到用户决定输入,并将信息写入文件;2、允许用户在成绩清单(保存在文件中)中查询;3、允许...

C语言 菜鸟级问题 15分 白送
书写规范没什么问题。。要是想简单一点可以用一个数组。。\/* 从用户输入的4个整数中找出最大值和最小值 *\/ include "stdio.h"void main(){ int a[4] , L , S ;int i;for(i=0;i<4;i++){ printf ( "Enter integers: " ) ;scanf("%d",&a[i]);} L=S=a[0];for(i=1;...

关于相邻数的问题,求c语言大神帮忙编程啊!!!
include <stdio.h>#include <string.h>long long max(long long a, long long b){ return a > b?a:b;}int main()\/\/原题,数据范围最大支持2^63 - 1 -> -2^63{ long long maxn = 0, sum = 0, maxi = 1LL<<63, a; int n; scanf("%d",&n); while(...

请大家看看这道题用c语言怎么做?
15天: 继续往后计算,总共是 1 + 2 + 2 + 3 + 3 + 3 + 4 + 4 + 4 + 4 + 5 + 5 + 5 + 5 + 5 = 55。

C语言的一道题,恳请明白人指点,悬赏分追加!!
1,j=(i++)+i;i++;只在表达式运算结束后对i加1运算,相当于j=i+i,i++;2,printf("%d\\t%d",++i,i)} printf ("",)括号内的表达式是自右向左运算的;明白了吧

我这有C语言的题,哪位大侠能解决一下,必有重谢!
这个好像没有答案 我计算的应该是8 4.语句printf(“%d\\n”,strlen(“xyz\\t\\xab\\3\\\\”));的输出结果是( C)。A)9 B)11 C)7 D)8 PS:strlen遇到\\0就停止计算长度。x y z \\t ab 3 \\ 5.在C语言中,函数的隐含存储类别是(A )。A)auto B)static C)extern D)无存储...

C语言高手 请告诉我几道简单的题! 我想搞明白 谢谢
第二个题,sum没有初始化,所以答案就选c了。记住一点哦,永远不要使用未初始化的变量!第三个题,选c,关键是那个static int d,这个地址分配以后,里面的内容直到程序执行结束才释放,这是变量生存期的问题了。最后多说一句,这些题,最好是自己动手敲到编译器里面执行一下,然后,用调试的功能,...

谁可以帮我做一下这个C++C语言的作业
因为我对C语言的输入输出不太熟悉,对输入输出的错误不予判断!我按C++的方式给予判断。一、 基础题(15%)1.定义int n=5,a=12;写出a*=(n%=3);执行后变量n与a的值。【答案】n%=3 取余结果n=2 执行后:n=2;a=24 2.设a=b=5;分别判断表达式的真假:6>a>2与++b==6。【答案】...

C语言程序编程题,求大神帮帮忙
include<stdio.h> int main(){ struct stu { int id;char name[11];int a,b,c;} t,st[5];int i,j;FILE *fp1,*fp2;if((fp1=fopen("d:\\\\stud.dat","r"))==NULL){ printf("f1 open error!\\n");return 1;} if((fp2=fopen("d:\\\\studsort.dat","w"))==NULL){ printf...

c语言程序设计有关编程题,急求答案
1题#include "stdio.h"main(){ int n,i;float sum=0,t,a=1.0,b=1;printf("please input n:");scanf("%d",&n);for(i=0;i<n;i++){ t=a\/b;sum+=t;b=b+2;} printf("sum=%f\\n",sum);} 2题#include "stdio.h"include"math.h"main(){ int n,bai,shi,ge;while(1)...

相似回答