各位高手帮帮忙!!!

ariel2002 2003-06-15 03:08:30
我是一个计算机大一学生,学了C程序,感觉云里雾里的,期末要做课程设计,和好多同学一样都觉得无从下手,各位高手帮帮忙啦,小女子先谢过了!!!
学习成绩管理系统
有一个文件名为file存放有10个学生的数据,每个学生的数据包括学号,姓名,性别年龄和计算机基础课程成绩,试编制一成绩管理系统,并实现以下功能。
1。界面设计--学生成绩管理系统
2.根据用户输入建立文件file
3.在file文件末尾追加学生记录
4.在用户指定的记录号前插入一个新记录
5.可以根据用户输入的学生号和对应的数据修改该学生的数据
6.可以根据用户输入的学生号和对应的数据删除该学生的数据
7.根据用户输入的信息,显示大于平均分数的学生所有的信息
8.根据用户输入的信息实现file文件的数据查问操作,用户对应按键功能如下:
向上箭头:显示上一个学生记录
向下箭头:显示下一个学生记录
PgUp:显示前面第page个学生记录
PgDn:显示后面````````````````
ESC:退出此系统
...全文
61 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
ariel2002 2003-08-02
  • 打赏
  • 举报
回复
十月
ariel2002 2003-07-01
  • 打赏
  • 举报
回复
十月,谢谢你啊!!
大概我还不太习惯在论坛上寻求帮助的方式,说谢谢是客套了点,不过我是真的感谢你
什么时候让我拜你为师吧,多学点东东。
kenen 2003-06-28
  • 打赏
  • 举报
回复
*******学习成绩管理系统*******


1.界面设计--学生成绩管理系统
可以用 cout<<"********学习成绩管理系统********"<<endl;
对于程序主体的设计用循环,其中用swicth语句,设计选择菜单。
类似的:
main
{
cout<<"********学习成绩管理系统********"<<endl;

程序相应初始化操作........
..........******..........

while(!ascii(ESC))

{
cout<<"\n\t\t下面有本程序功能选择菜单!"<<"\n请选择您所需要的操作!"<<endl;

cout<<"\n\t(1)***相应操作名称*** (2)***相应操作名称***"<<endl;

cout<<"\n\t(3)***相应操作名称*** (4)***相应操作名称***"<<endl;

cout<<"\n\t(5)***相应操作名称*** (6)***相应操作名称***"<<endl;

cout<<"\n\t(7)***相应操作名称*** (8)***相应操作名称***"<<endl;

cout<<" 请输入相应索引号:";
cin>>index;

switch(index)
{
case 1:***相应操作***;break;

case 2:***相应操作***;break;

case 3:***相应操作***;break;

case 4:***相应操作***;break;

case 5:***相应操作***;break;

case 6:***相应操作***;break;

case 7:***相应操作***;break;

case 8:***相应操作***;break;

..

} //switch end
} //while end
} //main end


2.根据用户输入建立文件file

类似设计:

其中注意参数的传递和内存管理


void file_create_save( link p )
{
//文件保存函数
FILE *fp;
char filename[10];
cout<<"\n请输入文件名:(文件名长度不超过10个西文字符!)"<<endl;
scanf("%s",filename);
if((fp=fopen(filename,"wb"))==NULL)
{
cout<<"\n\t文件新建/打开失败!"<<endl;
exit(0);
}
p=p->next;
while(p!=NULL)
{
if(fwrite(p,sizeof(struct list),1,fp)!=1)
{
cout<<"\n\t文件保存出错!"<<endl;
exit(0);
}
p=p->next;
}
fclose(fp);
cout<<"\n\t文件保存/新建成功!"<<endl;
}//file_save

link file_open(link head,link p)
{
//文件打开函数
FILE *fp;
link pointer,d,u;
char filename[10];
p=p->next;
while(p!=NULL)
{
//删除原有有序链表
//解决内存占用问题
d=p;
p=p->next;
delete d;
}
p=head;
cout<<"\n请输入文件名:(文件名长度不超过10个西文字符!)"<<endl;
scanf("%s",filename);
if((fp=fopen(filename,"rb"))==NULL)
{
cout<<"\n\t文件打开失败!"<<endl;
exit(0);
}
rewind(fp);
u=NULL;
do
{
pointer=new node;
fread(pointer,sizeof(struct list),1,fp);
p->next=pointer;
pointer->next=NULL;
u=p;
p=p->next;
}while(!feof(fp));
if (u!=NULL) u->next=NULL; free(p);
fclose(fp);
cout<<"\n\t文件打开成功!"<<endl;
list_print(head);
return head;
}//file_open




3.在file文件末尾追加学生记录

打开文件,读入内存。并对连表进行遍历得到尾结点,并追加记录(结点)


4.在用户指定的记录号前插入一个新记录

打开文件,读入内存。并对连表进行比较(与记录号进行比较)遍历。得到相应的结点插入位置。


5.可以根据用户输入的学生号和对应的数据修改该学生的数据
6. ```````````````````````````````````删除````````````

类似:3.4 打开文件,读入内存。并对连表进行遍历(比较 学生号和对应的数据 )

找到相应结点并对其进行相应操作。

7.根据用户输入的信息,显示大于平均分数的学生所有的信息

此类操作,对应于对链表的操作

按相应条件遍历链表,符合条件的的在屏幕打印。cout<<...


8.技术关键:

记录结点的定义:
我们可以用类或结构体
//****************************************************************
struct list
{
int record; ; 记录号
int studentnum ; 学号
char name[max]; ; 姓名
char sex[max]; ; 性别
int age ; 年龄
char sub1[max]; ; 课程1
int snb1mk; ; 课程1成绩
char sub2[max]; ; ..
int snb2mk; ; 课程2成绩
..
struct list *next;
};

//*****************************************************************

typedef struct list node;
typedef node *link;

//******************************************************************

定义对应记录后,就要在主程序里设计相应的输出格式与对应截面设计:

可考虑设计:printout ( );

其中对于结点的操作,主要是建立链表

类似的:


link list_create(link head,link p)
{
//创建有序链表
link pointer;
pointer=new node;
cout<<"\n记录号,学号,姓名,性别,年龄,课程1 ,课程1成绩,课程2,课程2成绩:"<<endl;


scanf("%d%s%s%s%d....",&pointer->record,&pointer->studentnum,pointer->name,pointer->sex,pointer->age....)

;
p->next=pointer;
pointer->next=NULL;
head=list_insert(head,p);
cout<<"\n\t有序链表创建成功!"<<endl;
return head;
}//list_create

link list_insert(link head,link p)
{
//结点有序插入函数
char ch;
link pointer;
while(1)
{
pointer=new node;
cout<<"\n记录号,学号,姓名,性别,年龄,课程1 ,课程1成绩,课程2,课程2成绩:"<<endl;


scanf("%d%s%s%s%d....",&pointer->record,&pointer->studentnum,pointer->name,pointer->sex,pointer->age....)

;
while(p->next!=NULL)
{
if(相应条件)
{
相应操作...
}
p=p->next;
}
if(p->next==NULL)
{
p->next=pointer;
pointer->next=NULL;
}
cout<<"\n\t想要继续吗? Y/N:";
cin>>ch;
if(ch=='n'||ch=='N')
break;
}
cout<<"\n\t结点插入成功!"<<endl;
list_print(head);
return head;
}//list_insert



关于键盘操作;可以参考键盘操作函数

类似kbhit();

可以 if (kbhit()=ascii(up)) then .....
if (kbhit()=ascii(down) then ....
..

类似操作...

最好在程序里设置键盘中断!




参考资料:www.vcok.com

时间有限,仓促之处。望见谅! 十月03.6.25.21:53
kenen 2003-06-26
  • 打赏
  • 举报
回复
不仅仅是学习语言的语法结构,更多的是一种文化,文化是一切学习的原动力,持久的原动力。注意对于程序员文化的热情!可以看《程序员》杂志。
shockely 2003-06-26
  • 打赏
  • 举报
回复
学习语言我觉得学习的是一种思想,编程的思想在任何的语言都通用!!
payzq 2003-06-26
  • 打赏
  • 举报
回复
多写写小东西
ariel2002 2003-06-25
  • 打赏
  • 举报
回复
十月,有没有什么学C语言的简单方法啊,或许学这门语言不会太容易,但请你告诉我一些小贴士啊,多谢多谢!!
蓝星儿,那个Delphi是什么东东啊,我还没有学啊!不过还是谢谢你的建议啦!!
lanxinger 2003-06-15
  • 打赏
  • 举报
回复
用Delphi做挺方便的,自己试试好啦
kenen 2003-06-15
  • 打赏
  • 举报
回复
我想或许,我可以帮忙。

可是我自己现在要考试啊

是不是在dos 下运行:

现在我可以给你一个我做的关于 手机库存 的例子:

要是你还没办法:发信给我,或者QQ:46139380 shiyue.shaohai@163.com

我再给你写一个。若要示例文件,可发信索要。

#include<stdio.h>
#include<stdlib.h>
#include<iostream.h>
#define max 20

//****************************************************************
struct list
{
int record;
int count;
float price;
char name[max];
char prosort[max];
struct list *next;
};

//*****************************************************************

typedef struct list node;
typedef node *link;

//******************************************************************

void list_print(link p)
{
//有序链表打印函数
while(p->next!=NULL)
{
cout<<"记录号"<<"\t"<<"名称"<<"\t"<<"型号"<<"\t"<<"单价"<<"\t"<<"数量"<<endl;
cout<<(p->next->record)<<"\t"<<(p->next->name)<<"\t"<<(p->next->prosort)<<"\t"<<(p->next->price)<<"\t"<<(p->next->count)<<endl;
p=p->next;
}
cout<<"\n\t有序链表打印成功!"<<endl;
}//list_print

void node_print(link p)
{
//结点打印函数
cout<<"记录号"<<"\t"<<"名称"<<"\t"<<"型号"<<"\t"<<"单价"<<"\t"<<"数量"<<endl;
cout<<(p->next->record)<<"\t"<<(p->next->name)<<"\t"<<(p->next->prosort)<<"\t"<<(p->next->price)<<"\t"<<(p->next->count)<<endl;
}//node_print


link list_insert(link head,link p)
{
//结点有序插入函数
char ch;
link pointer;
while(1)
{
pointer=new node;
cout<<"\n请输入家电—记录号,名称,型号,单价,数量:"<<endl;
scanf("%d%s%s%f%d",&pointer->record,pointer->name,pointer->prosort,&pointer->price,&pointer->count);
while(p->next!=NULL)
{
if(pointer->price<p->next->price)
{
pointer->next=p->next;
p->next=pointer;
break;
}
p=p->next;
}
if(p->next==NULL)
{
p->next=pointer;
pointer->next=NULL;
}
cout<<"\n\t想要继续吗? Y/N:";
cin>>ch;
if(ch=='n'||ch=='N')
break;
}
cout<<"\n\t结点插入成功!"<<endl;
list_print(head);
return head;
}//list_insert

link list_create(link head,link p)
{
//创建有序链表
link pointer;
pointer=new node;
cout<<"\n请输入家电—记录号,名称,型号,单价,数量:"<<endl;
scanf("%d%s%s%f%d",&pointer->record,pointer->name,pointer->prosort,&pointer->price,&pointer->count);
p->next=pointer;
pointer->next=NULL;
head=list_insert(head,p);
cout<<"\n\t有序链表创建成功!"<<endl;
return head;
}//list_create


link list_delete(link head,link p)
{
//结点删除函数
link d;
while(p->next!=NULL)
{
if(p->next->count==0)
{
d=p->next;
node_print(p);
p->next=d->next;
delete d;
if(p->next==NULL)break;
//保证最后一个结点的删除
}
p=p->next;
}

cout<<"\n\t结点删除成功!"<<endl;
list_print(head);
return head;
}//list_delete


link list_smodify(link head,link p)
{
//单价查询模式,结点查询修改函数
char ch;
int count=0;
float price;
cout<<"\n\t欢迎进入查询修改系统!"<<endl;
cout<<"\n\t您已进入单价查询模式!"<<endl;
while(1)
{
p=head;
cout<<"\n请输入查询——单价:";
cin>>price;
while(p->next!=NULL)
{
if(p->next->price==price)
{
count++;
cout<<"\n\t 查询到结点:"<<endl;
node_print(p);
cout<<"\n要对该结点进行修改吗? Y/N:";
cin>>ch;
if(ch=='y'||ch=='Y')
{
cout<<"\n请输入修改后的count值:";
cin>>p->next->count;
cout<<"\n修改结果为:"<<endl;
node_print(p);
}
}
p=p->next;
}
cout<<"\n查询到"<<count<<"个结果!"<<endl;
count=0;
cout<<"\n要退出查询修改系统吗?Y/N:";
cin>>ch;
if(ch=='Y'||ch=='y')
break;
}
cout<<"\n查询结束!"<<endl;
return head;
}//list_smodify

void file_save(link p)
{
//文件保存函数
FILE *fp;
char filename[10];
cout<<"\n请输入文件名:(文件名长度不超过10个西文字符!)"<<endl;
scanf("%s",filename);
if((fp=fopen(filename,"wb"))==NULL)
{
cout<<"\n\t文件新建/打开失败!"<<endl;
exit(0);
}
p=p->next;
while(p!=NULL)
{
if(fwrite(p,sizeof(struct list),1,fp)!=1)
{
cout<<"\n\t文件保存出错!"<<endl;
exit(0);
}
p=p->next;
}
fclose(fp);
cout<<"\n\t文件保存成功!"<<endl;
}//file_save

link file_open(link head,link p)
{
//文件打开函数
FILE *fp;
link pointer,d,u;
char filename[10];
p=p->next;
while(p!=NULL)
{
//删除原有有序链表
//解决内存占用问题
d=p;
p=p->next;
delete d;
}
p=head;
cout<<"\n请输入文件名:(文件名长度不超过10个西文字符!)"<<endl;
scanf("%s",filename);
if((fp=fopen(filename,"rb"))==NULL)
{
cout<<"\n\t文件打开失败!"<<endl;
exit(0);
}
rewind(fp);
u=NULL;
do
{
pointer=new node;
fread(pointer,sizeof(struct list),1,fp);
p->next=pointer;
pointer->next=NULL;
u=p;
p=p->next;
}while(!feof(fp));
if (u!=NULL) u->next=NULL; free(p);
fclose(fp);
cout<<"\n\t文件打开成功!"<<endl;
list_print(head);
return head;
}//file_open

//------------------------------------------------------------------------------
//*********************************************************************************
//------------------------------------------------------------------------------
//主程序
#include <iostream.h>
#include <stdio.h>
#include <stdlib.h>
void main()
{
int index;
char ch;
cout<<"\n\t\t欢迎您使用本程序!"<<"\n\t本程序将为您带来便利!"<<endl;
link head,q;
head=new node;
head->next=NULL;
//定义头结点和扫描指针q
while(1)
{
q=head;
cout<<"\n\t\t下面有本程序功能选择菜单!"<<"\n请选择您所需要的操作!"<<endl;
cout<<"\n\t(1)建有序链表 (2)打开文件 (3)插入结点 (4)删除结点"<<endl;
cout<<"\n\t(5)查询修改 (6)打印 (7)保存文件 (8)退出"<<endl;
cout<<" 请输入索引号:";
cin>>index;
switch(index)
{
case 1:head=list_create(head,q);break;
case 2:head=file_open(head,q);break;
case 3:head=list_insert(head,q);break;
case 4:head=list_delete(head,q);break;
case 5:head=list_smodify(head,q);break;
case 6:list_print(q);break;
case 7:file_save(q);break;
case 8:cout<<"\n退出前数据需要保存吗? Y/N:";
cin>>ch;
if(ch=='Y'||ch=='y')
file_save(head);
cout<<"\n\t要退出本程序吗? Y/N:";
cin>>ch;
cout<<"\n\t谢谢您的支持!"<<endl;
if(ch=='Y'||ch=='y')
exit(1);
}
}

}
//----------------------------------------------------------------------------------------------
//**************************************************************************************************
//-----------------------------------------------------------------------------------------------

6,905

社区成员

发帖
与我相关
我的任务
社区描述
《新程序员》读者俱乐部
其他 其他
社区管理员
  • 《程序员》杂志社区
  • SoftwareTeacher
  • 《新程序员》编辑部
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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