求c语言写的"一个简单的学生成绩管理程序"(等待)

xfary 2006-06-17 05:02:22
利用数组,设计一个简单的学生成绩管理程序。
要求:
1、一个学生的信息包括:序号、学号、性别、成绩1、成绩2、成绩3;
2、在main函数中设计并利用字符菜单进行管理项目的选择,程序一次运行可根据选择完成一项或多项操作,通过选择菜单的退出(或结束)项来结束程序的运行。
3、管理功能包括列表显示成绩清单、求平均成绩、查找最高分。各项功能分别用自定义函数实现;
4、其中列表显示需要根据进一步的会话选择,可以列出全部数据、按指定的性别筛选列表(性别可用0、1编码)、按指定学号列出个人全部数据、按平均成绩排序列表;
5、求平均成绩需要根据进一步的会话选择,可以按个人或按科目进行;
6、查找需要根据进一步的会话选择,可按最高个人平均分进行,可按指定科目的最高分进行,可按各科均≥80分进行。查找后列出满足条件者的全部信息;
7、为了便于调试,原始数据用赋初值的方法存入数组。
...全文
2301 16 打赏 收藏 转发到动态 举报
写回复
用AI写文章
16 条回复
切换为时间正序
请发表友善的回复…
发表回复
xfary 2006-06-17
  • 打赏
  • 举报
回复
楼上的哥们,我今天才注册的,好象只加了30分不够了
xfary 2006-06-17
  • 打赏
  • 举报
回复
好了,谢谢拉
laiwusheng 2006-06-17
  • 打赏
  • 举报
回复
未编译过
xfary 2006-06-17
  • 打赏
  • 举报
回复
电话簿的程序好象编译有错误哦
laiwusheng 2006-06-17
  • 打赏
  • 举报
回复
接分
laiwusheng 2006-06-17
  • 打赏
  • 举报
回复
void create(void)
{
int nn,k,r=0,na,nm=0;
char *p,n[20],t,*e1="@163.com",*e2="@sina.com",e3[20],l;
clrscr();
printf("\n\t\t请输入要创建的随机记录数目:"); /*输入创建随机记录的数目*/
scanf("%d",&nn); t=getchar();
if(head==NULL) t='t';
else {this=head;
while(this->next!=NULL)
this=this->next;
}
printf("\n\t\t随机记录中去除大写(y/n)?:");
l=getche();
for(k=0;k<=nn-1;k++)
{new=(struct tongx*)malloc(sizeof(struct tongx));
if(t=='t') {head=new;this=new; t='c';}
else {this->next=new;this=new;}
{ while(r<6) /*随机姓名的实现*/
r=random(15);
for(na=0;na<=r;na++)
{ nm=random(122);
if(l=='y') {while(!((nm>=97&&nm<=122))) nm=random(122);}
else {while(!((nm>=65&&nm<=90)||(nm>=97&&nm<=122))) nm=random(122);}
n[na]=nm;
}
n[na]=NULL;
strcpy(new->name,n);
}
{r=random(9);
if(r%2!=0) /*随机性别*/
new->sex='m';
else
new->sex='f';
}
{ for(na=0;na<=7;na++)
{nm=random(57);
while(nm<48)
nm=random(57);
n[na]=nm;
}
n[na]=NULL; r=random(9);
switch(r)
{case 0:strcpy(e3,"130");break;
case 1:strcpy(e3,"131");break;
case 2:strcpy(e3,"132");break;
case 3:strcpy(e3,"133");break;
case 4:strcpy(e3,"134");break;
case 5:strcpy(e3,"135");break;
case 6:strcpy(e3,"136");break;
case 7:strcpy(e3,"137");break;
case 8:strcpy(e3,"138");break;
case 9:strcpy(e3,"139");break;
default:strcpy(e3,"138");break;
}
strcat(e3,n);
strcpy(new->tel,e3);
}
{while(r<5)
r=random(11); /*随机QQ*/
for(na=0;na<=r;na++)
{ nm=random(57);
while(nm<48)
nm=random(57);
n[na]=nm;
}
n[na]=NULL;
strcpy(new->QQ,n);
}
{while(r<2)
r=random(13);
for(na=0;na<=r;na++) /*随机email*/
{nm=random(122);
if(l=='y') {while(!((nm>=97&&nm<=122))) nm=random(122);}
else {while(!((nm>=65&&nm<=90)||(nm>=97&&nm<=122))) nm=random(122);}
n[na]=nm;
}
n[na]=NULL;
if(r%2==0) strcat(n,e1);
else strcat(n,e2);
strcpy(new->email,n);
}
} new->next=NULL; /*结尾置空*/
printf("\n\t\t成功创建 %d 项记录",nn);
sleep(2);
}





void wrtadd(struct tongx *p)
{char s;
clrscr();
gotoxy(17,5);
printf("\n\t\t输入姓名:");
gets(p->name);
printf("\n\t\t输入性别:");
s: s=getche();if(s!='m'&&s!='f')
{printf("\n\t\t错误的输入请重输:"); goto s; }
else p->sex=s;
printf("\n\n\t\t输入电话号码:");
gets(p->tel);
printf("\n\t\t QQ号码:");
gets(p->QQ);
printf("\n\t\t电子邮箱:");
gets(p->email);
}





void del(void)
{ /*删除程序利用全局变量inf,标记删除的四种情况*/
inf='s'; /*用n,g,y,z标记.*/
this=find(); clrscr();
gotoxy(30,13);
switch(inf)
{case 'n': printf("没有那项记录!");
inf='r'; sleep(2); break;
case 'g': that=this->next; this->next=that->next; free(that);
printf("\n\t\t删除成功,请确认!");
inf='r'; sleep(2); break;
case 'y': that=this->next; this->next=NULL; free(that);
printf("\n\t\t删除成功,请确认!");
inf='r'; sleep(2); break;
case 'z': head=this->next; free(this);
printf("\n\t\t删除成功,请确认!");
inf='r'; sleep(2); break;
default: inf='r'; break;
}
}


struct tongx * find(void)
{ /*找到则返回节点,否则返回NULL.*/
char fr[20]; /*inf为f时表示是下面说的情况,inf为r表示没有以下情况*/
clrscr(); /*对于在指定节点前插入记录的查找,用全局变量inf分四种情况*/
gotoxy(18,5); /*分别对inf设置不同的标记。表为空m,没有记录n,记录为头节点d*/
this=head; /*找到并且前有节点g.*/
if(this==NULL) /*inf为f:指定节点前的查找,为s删除查找,inf为b表示指定节点后的查找,q修改查找,a标准查找*/
{ printf("\n\t表为空!"); sleep(3);
if(inf=='f'||inf=='s'||inf=='b'||inf=='q'||inf=='a') inf='m'; return(NULL);
}
else { printf("\n\t请输入姓名:");gets(fr);
if(strcmp(fr,this->name)!=0)
{ that=this->next;
while(that!=NULL&&strcmp(fr,that->name)!=0)
{this=that; that=that->next;
}
if(that==NULL||strcmp(fr,that->name)!=0)
{ if(inf=='f'||inf=='s'||inf=='a') inf='n'; return(NULL); }
else if(that->next==NULL&&inf=='s') {inf='y'; return(this);}
else if(inf=='f'||inf=='s') {inf='g'; return(this);}
return(that);
}
else if(inf=='f') inf='d';
else if(inf=='s') inf='z';
return(this);
}
}



void output(struct tongx *ppp,char d)
{
int j=0;
clrscr();
gotoxy(4,3);
if(ppp==NULL&&ppp==head)
{gotoxy(20,12);
printf("没有那项记录!"); sleep(3);
return ;
}
else if(d=='s') /*这里是查找输出*/
{gotoxy(17,4);
printf("姓名:%s\n\t\t性别:%c\n\t\t电话号码:%s",this->name,this->sex,this->tel);
printf("\n\t\tQQ号码:%s\n\t\t电子邮箱:%s",this->QQ,this->email);
return;
}
else {this=ppp;
printf("%-15s%-6s%-16s%-12s%s\n","姓名","性别","电话号码","QQ号码","电子邮箱");
while(this!=NULL)
{ printf(" %-15s%-6c%-16s%-12s%s\n",this->name,this->sex,this->tel,this->QQ,this->email);
j++; this=this->next;
if(!j%14) {printf("\n\n\t\t按任意键继续!"); getch();}
}
}
printf("\n\t\t共有%d项记录 !\n\n\n",j);
getch();
}



laiwusheng 2006-06-17
  • 打赏
  • 举报
回复
void addmenu(void)
{ char *ppp,g,s,num[20];
int x=18,y=3,b=1,k=39;
clrscr();
ppp="\
\ ========插入菜单========= \
\ 在表头前插入:1 \
\ 在表尾插入:2 \
\ 指定记录前插入:3 \
\ 指定记录后插入:4 \
\ 退出程序:5 \
\ 请选择一项:";
prttext(ppp,k,x,y,b);
s: s=getche();
switch(s)
{case '1':insfirst();break;
case '2':insend();break;
case '3':insbefore();break;
case '4':insafter();break;
case '5':eexit();
default: printf("\n\t请从上面选择");goto s;
}
printf("\n\t继续增加(y/n)?:");
g=getche();
if(g=='y') addmenu();
}


void insfirst(void)
{ new=(struct tongx *)malloc(sizeof(struct tongx));
if(head==NULL) {head=new;new->next=NULL;}
else {new->next=head; head=new;}
wrtadd(new);
}



void insend(void)
{new=(struct tongx *)malloc(sizeof(struct tongx));
if(head==NULL) {head=new; new->next=NULL;}
else { this=head;
while(this->next!=NULL)
this=this->next;
this->next=new;
new->next=NULL;
}
wrtadd(new);
}


void insbefore(void)
{inf='f';
this=find();
clrscr(); gotoxy(20,12);
switch(inf)
{case 'm':inf='r'; break; /*这里千万注意还原inf为r*/
case 'n':printf("\n\t\t没有那项记录!"); sleep(3); inf='r'; break;
case 'd':insfirst(); inf='r'; break;
case 'g':new=(struct tongx*)malloc(sizeof(struct tongx)); new->next=this->next;
this->next=new; inf='r'; wrtadd(new); break;
}
}


void update(void)
{ int x=17,y=14,b=1,k=23;
char *p,*up,d,n,s;
inf='q'; /*标识此次查找是update所为*/
this=find();
if(inf=='m') {inf='r'; return;}
else if(this==NULL) {clrscr(); gotoxy(20,12);
printf("没有那项记录!"); inf='r'; sleep(2); return;
}
clrscr();
d='s'; output(this,d); inf='r';
printf("\n\t\t当前数据如上:");
p="\
\ ==== 更新菜单 === \
\ 全部更新:1 \
\ 更新姓名:2 \
\ 更新性别:3 \
\ 电话号码:4 \
\ 更新QQ号:5 \
\ 电子邮箱:6 \
\ 请从上面选择:";
prttext(p,k,x,y,b);
in: n=getche();
switch(n)
{case '1': printf("\n\t\t你选择了修改所有,现在请您输入修改信息:");
wrtadd(this); break;
case '2': printf("\n\t\t你选择了更新姓名,现在请您输入新的名字:");
gets(this->name); break;
case '3':{ printf("\n\t\t你选择了更新性别,现在请您输入新的性别:");
s: s=getche();if(s!='m'&&s!='f') { printf("\n\t\t错误的输入,请重输:"); goto s; }
else this->sex=s; break;
}
case '4': printf("\n\t\t你选择了更新电话号码,现在请您输入新的号码:");
gets(this->tel);break;
case '5': printf("\n\t\t你选择了更新QQ,现在请您输入新的QQ号码:");
gets(this->QQ); break;
case '6': printf("\n\t\t你选择了更新电子邮箱,现在请您输入新的电子邮箱:");
gets(this->email);break;
default:printf("\n\t\t请从菜单里选择输入:!"); goto in;
}
clrscr();
}


void insafter(void)
{inf='b';
this=find();
if(inf=='m') {inf='r'; return; } /*表为空*/
else if(this==NULL)
{printf("\n\t没有那项记录!");inf='r'; sleep(2); return;}
else if(this->next==NULL) { new=(struct tongx*)malloc(sizeof(struct tongx));
this->next=new;
new->next=NULL; wrtadd(new); inf='r'; return;
}
else {new=(struct tongx*)malloc(sizeof(struct tongx));
new->next=this->next;this->next=new; inf='r'; wrtadd(new);
}
}




xfary 2006-06-17
  • 打赏
  • 举报
回复
谢谢啦,不过我只要c语言的程序,就是控制台界面的,window窗体我有现成的用不上!呵呵
laiwusheng 2006-06-17
  • 打赏
  • 举报
回复
//电话簿
#include "stdio.h"
#include "stdlib.h"
#include "conio.h"
#include "dos.h"
#include "io.h"
void diskmenu(void);
void fupdate(void);
void fadd(void);
void foutput(void);
void fdelete(void);
void filesave(void);
void menu(void);
void ddestroy(void);
void output(struct tongx*,char d);
void wrtadd(struct tongx*);
void create(void);
void update(void);
void addmenu(void);
void del(void);
struct tongx * find(void);
void insfirst(void);
void insend(void);
void insbefore(void);
void insafter(void);

struct tongx
{char name[20]; /*单向动态链表结构体*/
char sex; /*通讯录*/
char tel[15];
char QQ[14]; /*不含头节点*/
char email[20];
struct tongx *next;
};
struct tongx *head=NULL,*this=NULL,*new,*that,fdisk;

/*全局变量*/
char inf='r',*filename;
FILE *fp;
long offset=0; /*用来记录文件指针的移动*/

/*函数从这里正式开始*/

void main(void) /*这样搞个主函数是便于调用,因为主函数谁也不能调用*/
{menu();
}


void prttext(char *p,int k,int x,int y,int b)
{ int m,n;
n=strlen(p); m=0; /*这个函数我常用,可以实现在屏幕的任意地方打印输出*/
gotoxy(x,y); /*可以改变打印速度在TC3下建议为10或20*/
while(m<=n)
{
printf("%c",*p); p++; m++; delay(50);
if(m%k==0) { y+=b; gotoxy(x,y);
}
}
}


void eexit(void)
{char d;
clrscr(); gotoxy(17,6); /*退出函数,提示是否保存操作到磁盘*/
printf("保存到磁盘(y/n)?"); d=getch();
if(d=='y') filesave();
printf("\n\t\t按任意键退出");
getch(); exit(0);
}



/*以下是直接操作磁盘文件的函数*/

void fadd()
{ char s,num[20];
clrscr();
fseek(fp,0,2);
printf("\n\t输入姓名:");
gets(fdisk.name);
printf("\n\t性别:");
s: s=getche();if(s!='m'&&s!='f')
{printf("\n\t\t输入错误请重输:"); goto s; }
else fdisk.sex=s;
printf("\n\n\t电话号码:");
gets(fdisk.tel);
printf("\n\tQQ号码:");
gets(fdisk.QQ);
printf("\n\t电子邮箱:");
gets(fdisk.email);
fprintf(fp,"%-15s%-6c%-16s%-12s%-20s\n",fdisk.name,fdisk.sex,fdisk.tel,fdisk.QQ,fdisk.email);

}


void foutput(void)
{int m=0; /*通用打开磁盘文件函数*/
char string[90],*p;
clrscr();rewind(fp);
while(fgets(string,90,fp)!=NULL)
{ printf("%s",string);
m++;
if(m%40==0) {printf("\n\t\t按任意键继续!"); getch();}
}
getch();
}


void fsearch(void)
{ /*从磁盘文件中查找记录*/
char name[20],f='n';
printf("\n\t\t输入姓名:");
gets(name); rewind(fp);
while(!feof(fp))
{ fscanf(fp,"%s%s%s%s%s",fdisk.name,fdisk.sex,fdisk.tel,fdisk.QQ,fdisk.email);
if(strcmp(fdisk.name,name)!=0)
continue;
else { printf("\n\t\t查找命令成功完成!\n");
printf("\t\t姓名:%s\n\t\t性别:%s\n\t\t电话号码:%s",fdisk.name,fdisk.sex,fdisk.tel);
printf("\n\t\tQQ号码:%s\n\t\t电子邮箱:%s",fdisk.QQ,fdisk.email);
getch(); f='y';break;
}
}
if(f!='y') {printf("\n\t\t找不到记录!"); sleep(3);diskmenu();}
}

void fupdate()
{ char name[20];
printf("\n\t\t输入要更新记录的姓名:");
gets(name); rewind(fp);
while(!feof(fp))
{ offset=ftell(fp);
fscanf(fp,"%s%s%s%s%s",fdisk.name,fdisk.sex,fdisk.tel,fdisk.QQ,fdisk.email);
if(strcmp(fdisk.name,name)!=0) continue;
else inf='f';break;
}
if(inf!='f') {printf("\n\t\t对不起,没那项记录!"); inf='r'; return;}
else {printf("\n\t\t按顺序输入 姓名 性别 电话号码 QQ 电子邮箱 \n\n\t\t");
scanf("%s%c%s%s%s",fdisk.name,fdisk.sex,fdisk.tel,fdisk.QQ,fdisk.email);
fseek(fp,offset,0); /*下面的输入要在前面加个\n这是我调试了很久才悟出的*/
fprintf(fp,"\n%-15s%-6c%-16s%-12s%-20s",fdisk.name,fdisk.sex,fdisk.tel,fdisk.QQ,fdisk.email);
printf("\n\t\t记录成功更新!"); sleep(2);
}
}


void fdelete()
{ char name[20],d;
printf("\n\t\t输入删除项的姓名:");
gets(name); rewind(fp);
while(!feof(fp))
{ offset=ftell(fp);
fscanf(fp,"%s%s%s%s%s",fdisk.name,fdisk.sex,fdisk.tel,fdisk.QQ,fdisk.email);
if(strcmp(fdisk.name,name)!=0) continue;
else inf='f';break;
}
if(inf!='f') {printf("\n\t\t找不到那项记录!"); inf='r';sleep(2); return;}
printf("\n\t\t 确认删除(y/n)?");
d=getche();
if(d!='y') return;
fseek(fp,offset,0);
fprintf(fp,"\n%-15s%-6s%-16s%-12s%-20s","","","","","","");
printf("\n\t\t删除成功!"); sleep(3);
}


void filesave(void)
{char fn[20],none='e';
printf("\n\t\t输入保存文件名,注意最好是文本文件:");
gn: gets(fn);
if ((fp=fopen(fn,"w+"))==NULL)
{ printf("\n\t\tcreat file %s failed!",fn); sleep(2); return; }
{if(head!=NULL)
{this=head;
fprintf(fp,"%-15s%-6s%-16s%-12s%-20s\n","姓名","性别","电话号码","QQ号码","电子邮箱");
while(this!=NULL)
{ fprintf(fp,"%-15s%-6c%-16s%-12s%-20s\n",this->name,this->sex,this->tel,this->QQ,this->email);
this=this->next;
}
}
else none='n';
}
fclose(fp);
if(none=='n') /*检查表记录是否为空*/
{printf("\n\t\t警告表为空!");sleep(4);}
}



void diskmenu(void)
{char *p,s;
int k=26,x=17,y=4,b=1;
p="\
\ =磁盘文件操作菜单= \
\ 追加记录:1 \
\ 删除记录:2 \
\ 查找记录:3 \
\ 列出所有记录:4 \
\ 更新记录:5 \
\ 返回主菜单:6 \
\请选择一个:";
clrscr(); prttext(p,k,x,y,b);
s: s=getche();
switch(s)
{case '1':fadd();break;
case '2':fdelete();break;
case '3':fsearch();break;
case '4':clrscr(); foutput();break;
case '5':fupdate();break;
case '6':fclose(fp); menu(); /*返回时关闭文件*/
default:printf("\n\t\t请重列表中选择输入!"); goto s;
}
if(k!=444) {rewind(fp); diskmenu();} /*这样便可以连续操作,直到自己要返回*/
}




void menu(void)
{ char *ppp,d,m,jf,lan;
int x,y,b=1,k,n;
ppp="\
\ === 主菜单 === \
\ 增加记录:0 \
\ 删除记录:1 \
\ 查找记录:2 \
\ 列出所有记录:3 \
\ 更新记录:4 \
\ 创建随机记录:5 \
\ 操作磁盘文件:6 \
\ 清空单链表:7 \
\ 保存到磁盘:8 \
\ 退出:9 \
\ 请从上面选择:";
k=32; x=17; y=5;
clrscr();
prttext(ppp,k,x,y,b);
error: m=getche();
switch(m)
{case '0': addmenu();break;
case '1': del();break;
case '2': inf='a'; this=find(); /*用全局变量标识几种不同的查找*/
if(this==NULL&&inf=='m') {inf='r'; break; }
else if(inf=='n')
{ printf("\n\t\t找不到记录!"); sleep(2); inf='r'; break;}
else {d='s'; inf='r'; output(this,d); break;}
case '3':d='a'; output(head,d); break;
case '4':update();break;
case '5':create();break;
case '6': printf("\n\t\t输入文件名:"); gets(filename);
if((fp=fopen(filename,"r+"))==NULL) /*打开文件进行读写操作*/
{printf("\n\t\t不能打开指定文件!"); sleep(3);}
else diskmenu();break;
case '7':ddestroy();break;
case '8':filesave();break;
case '9':eexit();
default: printf("\n\t\t请从菜单中选折输入:"); goto error;
}
if(lan!='z') menu();
}



void ddestroy(void)
{ if(head==NULL) return;
else if(head->next==NULL) { free(head); head=NULL; }
else { this=head; that=this->next; head=NULL; /*销毁表并释放空间*/
while(that!=NULL)
{new=this; this=that; that=this->next; free(new);
}
}
printf("\n\t\t清空记录完成!");
sleep(4);
}


laiwusheng 2006-06-17
  • 打赏
  • 举报
回复
电话簿http://fanged.yculblog.com/post.200731.html
happytang 2006-06-17
  • 打赏
  • 举报
回复
网上搜一下,一堆
laiwusheng 2006-06-17
  • 打赏
  • 举报
回复
void sortByAve()
{
struct student *p,*q;
if(!head)
{
printf("No record!No needs!\n");
return ;
}
if(!head->next) return;
p=head;
while(p->next)
{
q=p->next;
while(q)
{
if(q->ave < p->ave) exchange(p,q); /*只交换内容*/
q=q->next;
}
p=p->next;
}
}

void sortByTotal()
{
struct student *p,*q;
if(!head)
{
printf("No record!No needs!\n");
return ;
}
if(!head->next) return;
p=head;
while(p->next)
{
q=p->next;
while(q)
{
if(q->total < p->total) exchange(p,q);
q=q->next;
}
p=p->next;
}
}

void showAll()
{
struct student *p;
int i=0;

char name[20]="-name-";
char chi[10]="-chinese-";
char math[10]="-math-";
char eng[10]="english";

p=head;
if(!p)
{
printf("no record!\n");
return ;
}

/*for(i=0;i<20;i++) printf("%c",name[i]);
printf(" ");
for(i=0;i<10;i++) printf("%c",chi[i]);
printf(" ");
for(i=0;i<10;i++) printf("%c",math[i]);
printf(" ");
for(i=0;i<10;i++) printf("%c",eng[i]);
printf("\n"); */

while(p)
{
printf("-%s- ",p->name);
printf("chinese: %.2f ",p->chinese);
printf("math: %.2f ",p->math);
printf("english: %.2f ",p->english);
/*printf("\n"); */
printf("average: %.2f ",p->ave);
printf("total: %.2f ",p->total);
printf("\n");
p=p->next;
}

return;
}

void showOption()
{
printf("\nplease choose the number of the options following:\n");
printf("0 : eixt\n");
printf("1 : add a record in the end\n");
printf("2 : show all student\n");
printf("3 : update one record\n");
printf("4 : delete a student\n");
printf("5 : sort the record by the average\n");
printf("6 : sort the record by the total\n");
return ;
}

void StartScreen()
{
printf("\n\n");
printf(" --- This is a student score administ program ---\n");
printf(" --designed by EnemyOfFaith\n");
printf(" December 13th,2005\n");
printf("\n\n\n");
printf(" press any key to start\n");
}

/* void ctnu()
{
printf("\npress any key to continue!\n");
} */

int main()
{
struct student in;
/* char name[20]; */
head=NULL;

StartScreen();

getchar();

system("cls");
while(1)
{
showOption();
switch(getchar())
{
getchar(); /*接收回车符*/
case '0':
printf("\npress any key to exit\n\n");
getchar();
return 0;

case '1':
printf("please input the following information of the person added: \n");
printf("name: "); scanf("%s",in.name);
printf("chinese score: "); scanf("%f",&in.chinese);
printf("math score: "); scanf("%f",&in.math);
printf("english score:"); scanf("%f",&in.english);
getchar();

insertMem(&in);
break;

case '2':
printf("show all the student in the record:\n");
showAll();
getchar();
break;

case '3':
printf("please input the name you need update:\n");
scanf("%s",in.name);
getchar();
update(in.name);
getchar();
break;

case '4':
printf("please input the the name of the person you delete:\n");
scanf("%s",in.name);
getchar();
deleteMem(in.name);
break;

case '5':
sortByAve();
getchar();
break;

case '6':
sortByTotal();
getchar();
break;

default:
printf("Wrong command! Press 'enter' then try again\n");
getchar();
break;
}
}

return 0;
}
laiwusheng 2006-06-17
  • 打赏
  • 举报
回复
/*把要求略去了些,但基本功能都差不多了*/
#include <stdio.h>
#include <stdlib.h>
#include <malloc.h>
#include <string.h>

int courseCount=3;

struct student
{
char name[20];
float chinese,math,english;
float ave,total;
struct student * next;
};

struct student *head;

void insertMem(struct student * ins)
{
struct student * p;
int count=0;
if(head==NULL)
{
head=(struct student *)malloc(sizeof(struct student));
strcpy(head->name,ins->name);
head->chinese=ins->chinese;
head->math=ins->math;
head->english=ins->english;
head->total=head->chinese+head->math+head->english;
head->ave=head->total/courseCount;
head->next=NULL;
printf("insert successful!\n");
return ;
}

p=head;
while(p->next) p=p->next;
p->next=(struct student *)malloc(sizeof(struct student));

strcpy(p->next->name,ins->name);
p->next->chinese=ins->chinese;
p->next->math=ins->math;
p->next->english=ins->english;
p->next->total=p->next->chinese+p->next->math+p->next->english;
p->next->ave=p->next->total/courseCount;

p->next->next=NULL;
printf("insert successful!\n");
return;
}

void deleteMem(char del_name[])
{
struct student * p,* q;
/*若 head 为空,通迅录则没有数据*/
if(!head)
{
printf("no record!\n\n");
return ;
}
/*若是头结点,则*/
if(!strcmp(head->name,del_name))
{
printf("find it: ");
printf("%s chinese:%f,math:%f,english:%f \n",head->name,head->chinese,head->math,head->english);
head=head->next;
printf("delete successful!\n");
return ;
}

p=head;q=p;
while(p)
{
if(!strcmp(p->name,del_name))
{
printf("find it: ");
printf("%s chinese:%f,math:%f,english:%f \n",p->name,p->chinese,p->math,p->english);
if(p==head){ head=NULL; return; }
else
{
q->next=p->next;
printf("delete successful!\n");
return;
}
}
q=p;
p=p->next;
}

if(!p) printf("not found!\n\n");
return ;
}

struct student * search(char name[])
{

struct student *p=NULL;
if(head==NULL) { printf("no record!\n"); return p; }
p=head;
while(p)
{
if(!strcmp(p->name,name))
{
printf("find it!\n");
printf("-%s- ",p->name);
printf("chinese: %.2f ",p->chinese);
printf("math: %.2f ",p->math);
printf("english: %.2f ",p->english);
/*printf("\n"); */
printf("average: %.2f ",p->ave);
printf("total: %.2f ",p->total);
printf("\n");
return p;
}
p=p->next;
}
return p;
}

void update(char c[])
{
struct student *upd;
upd=search(c);
if(!upd)
{
printf("not found!\n");
return;
}
printf("please choose the option:\n");
printf(" 1. chinse\n");
printf(" 2. math\n");
printf(" 3. english\n");
switch(getchar())
{
getchar();
case '1':
printf("please input the new chinese score:\n");
scanf("%f",&upd->chinese );
break;
case '2':
printf("please input the new math score:\n");
scanf("%f",&upd->math);
break;
case '3':
printf("please input the new english score:\n");
scanf("%f",&upd->english);
break;
}

upd->total=upd->chinese+upd->math+upd->english;
upd->ave=upd->total/courseCount;
printf(" update successful! \n");
return ;
}


/*只交换数据,而不改变指向*/
void exchange(struct student *p,struct student *q)
{
struct student *t=(struct student *)malloc(sizeof(struct student));
strcpy(t->name,p->name); strcpy(p->name,q->name); strcpy(q->name,p->name);

t->chinese=p->chinese; p->chinese=q->chinese; q->chinese=t->chinese;
t->math=p->math; p->math=q->math; q->math=t->math;
t->english=p->english; p->english=q->english; q->english=t->english;
t->ave=p->ave; p->ave=q->ave; q->ave=t->ave;
t->total=p->total; p->total=q->total; q->total=t->total;

free(t);
return ;
}

xfary 2006-06-17
  • 打赏
  • 举报
回复
求的就是作业,偶现在是搞C# windows应用程序的,有些时间不用c和c++了,朋友让帮他用c写份简单的作业,竟然写不出来,惭愧呀,只有在这里求救啦!
laiwusheng 2006-06-17
  • 打赏
  • 举报
回复
如果电话簿管理程序在电脑上运行,是作业
写嵌入式的程序的话,有意思!
xfary 2006-06-17
  • 打赏
  • 举报
回复
或者:
编写程序,设计一个电话簿管理程序。
(要求:
1、每条数据包括:姓名、班级、电话号码、E-mail地址;
2、在main函数中设计并利用字符菜单进行管理项目的选择,程序一次运行可根据选择完成一项或多项操作,通过选择菜单的退出(或结束)项来结束程序的运行。
3、管理功能包括:加入一条新的电话记录、删除一条电话记录、显示保存的所有电话记录、修改某条记录、查询、排序显示;
4、查询功能包括:按人名查询电话号码、按电话号码查询人名(如宿舍电话一个号码对应多人);
5、排序显示功能包括:按照电话号码排序显示、按照姓名字母排序显示,并且当一页显示不下时可分页显示;
6、数据结构采用结构体,数据存储采用文本文件。

69,369

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧