c语言程序设计题 跪求高人的复杂版~ 慢不要紧 主要是要对~

题目:歌曲排行榜系统
[题目描述]
设计一个歌曲排行榜的菜单化信息管理系统。
假设每首歌曲包含编号、歌曲名称和歌手姓名等信息,要求提供歌曲信息、浏览歌曲信息、投票和输出前10名等功能。
该程序应该具有下列功能:
(1)输入歌曲信息;
(2)浏览歌曲信息;
(3)显示前10名歌曲信息;
(4)投票。

[题目要求]
(1)按照分析、设计、编码、调试和测试的软件开发过程完成这个应用系统;
(2)为各项操作功能设计一个菜单,应用程序运行后,先显示这个菜单,然后用户通过菜单项选择希望进行的操作项目。
[输入要求]
应用程序运行后,在屏幕上显示一个菜单。用户可以根据需求,选定相应的操作项目。进入每个操作后,根据应用程序的提示信息,从键盘输入相应的信息。
[输出要求]
(1)应用程序运行后,要在屏幕上显示一个菜单;
(2)要求用户输入数据时,要给出清晰、明确的提示信息,包括输入的数据内容、格式及结束方式等。
[提示]
假设每个歌曲信息仅包含编号、歌曲名称、歌手姓名和票数,并使用下面定义的结构类型表示:
Tyoedef struct song{
Int No; /*编号*/
Char song_name[32]; /*歌曲名称*/
Char name[16]; /*歌手姓名*/
Int num ; /*票数*/
}SONG;

恩,完工了,你看看吧:

//注:本程序因涉及到引用即“&”,所以得保存为.cpp的后缀名再用c++编译器进行编译
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <conio.h>
#include <time.h>//用来得到当前时间
typedef struct student
{
char stuNumber[20];
char classNumber[20];
double score[10];
struct student *next;
}stuNode,*stuList;

void cre_node(stuList &L)//createNode,创建节点
{
int i;
L=(stuList)malloc(sizeof(stuNode));
L->next=NULL;
for(i=0;i<10;i++)
L->score[i]=0;
}

void add_node(stuList &L,char stuNumber[],char classNumber[],stuList &p)//增加节点
{
stuList q,prior;
prior=L;
p=L->next;
while(p && strcmp(classNumber,p->classNumber))
{
prior=p;
p=p->next;
}
while(p && !strcmp(classNumber,p->classNumber))
{
prior=p;
p=p->next;
}
cre_node(q);
strcpy(q->stuNumber,stuNumber);
strcpy(q->classNumber,classNumber);
q->next=prior->next;
prior->next=q;
p=q;
}

int check_list(stuList L,char stuNumber[])
{
stuList p=L->next;
while(p && strcmp(stuNumber,p->stuNumber))
p=p->next;
if(p)
{
puts("学号不能重复,请重新输入:");
return 0;
}
return 1;
}

void cre_cla_info(stuList &L)//create class infomation
{
int i=0,j=0;
char classNumber[20],stuNumber[20];
stuList p;
puts("开始创建班级信息(输入0结束):");
while(1)
{
printf("\n请输入第%d个班级班号:\n",i+1);
fflush(stdin);
gets(classNumber);
if( !strcmp(classNumber,"0"))
break;
printf("开始创建%s班的学生信息(输入0结束):\n",classNumber);
j=0;
while(1)
{
printf("请输入第%d个学生学号:\n",j+1);
fflush(stdin);
while(1)
{
gets(stuNumber);
if(check_list(L,stuNumber))
break;
}
if( !strcmp(stuNumber,"0"))
break;
add_node(L,stuNumber,classNumber,p);
j++;
}
i++;
}
p=L->next;
system("cls");
puts("班级信息为:");
while(p)
{
strcpy(classNumber,p->classNumber);
printf("%s班:\n",classNumber);
while(p && !strcmp(p->classNumber,classNumber))
{
puts(p->stuNumber);
p=p->next;
}
}
puts("\n按任意一个键继续:");
getch();
}

int get_stu_info(stuList &L,char stuNumber[],stuList &p)//get student infomation
{
char ch,classNumber[20];
p=L->next;
while(p && strcmp(stuNumber,p->stuNumber))
p=p->next;
if( !p)
{
puts("无该学生记录,你要增加该学生记录吗?(是则输入Y或y,不是输入则输入其他字符):");
scanf(" %c",&ch);
if(ch=='Y' || ch=='y')
{
puts("输入该学生所在班级班号:");
fflush(stdin);
gets(classNumber);
add_node(L,stuNumber,classNumber,p);
return 2;
}
else
return 0;
}
return 1;
}

void print_cla_info(stuList &L,char classNumber[])
{
double average;
int i=0,flag=0;
char ch,stuNumber[20];
stuList p=L->next;
while(p)
{
if( !strcmp(p->classNumber,classNumber))
{
flag=1;
printf("学生%s作业完成情况为:\n",p->stuNumber);
average=0;
for(i=0;i<10;i++)
{
average+=p->score[i];
printf("第%d次:\t%g\n",i+1,p->score[i]);
}
average/=10;
printf("\n该学生期末成绩为: %g\n\n",average);
}
p=p->next;
}
if( !flag)
{
puts("无该班级信息,要创建一个吗?是输入Y或y,不是则输入其他字符:");
scanf(" %c",&ch);
if(ch=='Y' || ch=='y')
{
puts("输入该班学生学号,输入0结束:");
i=1;
while(1)
{
printf("请输入第%d个学生学号:\n",i++);
while(1)
{
fflush(stdin);
gets(stuNumber);
if(check_list(L,stuNumber))
break;
}
if( !strcmp(stuNumber,"0"))
break;
add_node(L,stuNumber,classNumber,p);
}
}
}
puts("\n按任意一个键继续:");
getch();
}

void print(void)
{
puts("请选择一个操作进行(输入一个数字):\n");
puts("(1)录入某位学生某次作业的分数:\n");
puts("(2)给定学号,显示某位学生的作业完成情况:\n");
puts("(3)给定某个班级的班号,显示该班学生所有学生的作业完成情况:\n");
puts("(4)给定某位学生的学号,修改该学生的作业完成情况:\n");
puts("(5)给定某位学生的学号,删除该学生的作业完成情况:\n");
puts("(6)提供一些统计各类信息的功能:\n");
puts("输入其他数字退出:\n");
}

void count(stuList L)
{
time_t cur_time;//time_t在time.h头文件中被定义为long型
double average,m;
int n,i,flag1,flag2,sum1,sum2;
stuList p;
char classNumber[20];
cur_time=time(NULL);//得到当前系统时间
FILE *fp;
fp=fopen("d:\\统计.txt","a+");
fputs("\n\n&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&\n",fp);
fputs("时间格式:星期,月,日,小时:分:秒,年\n存档时间:",fp);
fputs(ctime(&cur_time),fp);
while(1)
{
system("cls");
puts("统计查询:");
puts("如若显示内容超过窗口所容,你可以到d:\\统计.txt文本中查看:\n");
puts("请选择一个操作进行(输入一个数字):\n");
puts("(1)显示全部班级学生作业完成情况,并显示总人数:\n");
puts("(2)显示所有满足某次作业分数不大于m的学生,并显示学生人数(m值由你输入,且范围为0~100):\n");
puts("(3)显示所有满足某次作业分数不小于m的学生,并显示学生人数(m说明同上)::\n");
puts("(4)显示满足第i次作业分数不大于m的学生,并显示人数(i范围1~10,m范围0~100):\n");
puts("(5)显示满足第i次作业分数不小于m的学生,并显示人数(i范围1~10,m范围0~100):\n");
puts("输入其他数字返回:\n");
scanf("%d",&n);
if(n<1 || n>5)
break;
p=L->next;
if(n==1)
{
system("cls");
while(p)
{
sum1=0;
strcpy(classNumber,p->classNumber);
printf("\n%s班所有学生作业完成情况为:\n",classNumber);
fprintf(fp,"\n%s班所有学生作业完成情况为:\n",classNumber);
while( p && !strcmp(classNumber,p->classNumber))
{
average=0;
printf("\n学生%s:\n",p->stuNumber);
fprintf(fp,"学生%s:\n",p->stuNumber);
for(i=0;i<10;i++)
{
average+=p->score[i];
printf("第%d次作业分数:\t%g\n",i+1,p->score[i]);
fprintf(fp,"第%d次作业分数:\t%g\n",i+1,p->score[i]);
}
average/=10;
printf("该学生期末成绩为: %g\n",average);
fprintf(fp,"该学生期末成绩为: %g\n",average);
p=p->next;
sum1++;
}
printf("\n~%s班总人数为: %d~\n",classNumber,sum1);
fprintf(fp,"\n~%s班总人数为: %d~\n",classNumber,sum1);
puts("~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~");
fputs("~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~",fp);
}
puts("\n按任意一个键继续:");
getch();
}
else if(n==2 || n==3)
{
system("cls");
puts("请输入m值(0~100):");
fputs("\n请输入m值(0~100):",fp);
while(1)
{
scanf("%lf",&m);
fprintf(fp,"%g\n",m);
if(m<0 || m>100)
{
puts("输入有误,请重新输入:");
fputs("输入有误,请重新输入:",fp);
continue;
}
break;
}
if(n==2)
{
printf("所有满足某次作业分数不大于%g的学生为:\n",m);
fprintf(fp,"所有满足某次作业分数不大于%g的学生为:\n",m);
}
else
{
printf("所有满足某次作业分数不小于%g的学生为:\n",m);
fprintf(fp,"所有满足某次作业分数不小于%g的学生为:\n",m);
}
sum2=0;
while(p)
{
strcpy(classNumber,p->classNumber);
printf("\n%s班:\n",classNumber);
fprintf(fp,"\n%s班:\n",classNumber);
flag1=0;
sum1=0;
while( p && !strcmp(classNumber,p->classNumber))
{
flag2=0;
for(i=0;i<10;i++)
if(n==2 && p->score[i] <= m)
{
flag1++;
flag2++;
if(flag2==1)
{
sum1++;
printf("\n学生%s:\n",p->stuNumber);
fprintf(fp,"学生%s:\n",p->stuNumber);
}
printf("第%d次作业分数: %g\n",i+1,p->score[i]);
fprintf(fp,"第%d次作业分数: %g\n",i+1,p->score[i]);
}
else if(n==3 && p->score[i] >= m)
{
flag1++;
flag2++;
if(flag2==1)
{
sum1++;
printf("\n学生%s:\n",p->stuNumber);
fprintf(fp,"学生%s:\n",p->stuNumber);
}
printf("第%d次作业分数: %g\n",i+1,p->score[i]);
fprintf(fp,"第%d次作业分数: %g\n",i+1,p->score[i]);
}
p=p->next;
}
if( !flag1)
{
printf("NULL:\n");
fprintf(fp,"%NULL:\n");
}
printf("\n%s班满足条件人数为:%d\n",classNumber,sum1);
fprintf(fp,"\n%s班满足条件人数为:%d\n",classNumber,sum1);
puts("~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~");
fputs("~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~",fp);
sum2+=sum1;
}
printf("\n一共满足条件人数为:%d\n",sum2);
fprintf(fp,"\n一共班满足条件人数为:%d\n",sum2);
puts("\n按任意一个键继续:");
getch();
}
else if(n==4 || n==5)
{
system("cls");
puts("输入i和m的值,用空格键分开(i:1~10,m:0~100):");
fputs("输入i和m的值,用空格键分开(i:1~10,m:0~100):",fp);
while(1)
{
scanf("%d%lf",&i,&m);
if(i<1 || i>10 || m<0 || m>100)
{
puts("输入错误,请重新输入:");
fputs("输入错误,请重新输入:",fp);
continue;
}
break;
}
if(n==4)
{
printf("所有满足第%d次作业分数不大于%g的学生为:\n",i,m);
fprintf(fp,"所有满足第%d次作业分数不大于%g的学生为:\n",i,m);
}
else
{
printf("所有满足第%d次作业分数不小于%g的学生为:\n",i,m);
fprintf(fp,"所有满足第%d次作业分数不小于%g的学生为:\n",i,m);
}
sum2=0;
while(p)
{
strcpy(classNumber,p->classNumber);
printf("\n%s班:\n",classNumber);
fprintf(fp,"\n%s班:\n",classNumber);
flag1=0;
sum1=0;
while( p && !strcmp(classNumber,p->classNumber))
{
if(n==4 && p->score[i-1] <= m)
{
flag1++;
sum1++;
printf("学生%s,作业分数: %g\n",p->stuNumber,p->score[i-1]);
fprintf(fp,"学生%s,作业分数: %g\n",p->stuNumber,p->score[i-1]);
}
else if(n==5 && p->score[i-1] >= m)
{
flag1++;
sum1++;
printf("学生%s,作业分数: %g\n",p->stuNumber,p->score[i-1]);
fprintf(fp,"学生%s,作业分数: %g\n",p->stuNumber,p->score[i-1]);
}
p=p->next;
}
if( !flag1)
{
printf("NULL:\n",classNumber);
fprintf(fp,"NULL:\n",classNumber);
}
printf("\n%s班满足条件人数为:%d\n",classNumber,sum1);
fprintf(fp,"\n%s班满足条件人数为:%d\n",classNumber,sum1);
puts("~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~");
fputs("~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~",fp);
sum2+=sum1;
}
printf("\n一共满足条件人数为:%d\n",sum2);
fprintf(fp,"\n一共班满足条件人数为:%d\n",sum2);
puts("\n按任意一个键继续:");
getch();
}
}
fclose(fp);
}

void destroy_list(stuList &L)
{
stuList p;
while(p=L->next)
{
L->next=p->next;
free(p);
}
free(L);
}

int main()
{
int m,n,i;
double average;
char stuNumber[20],classNumber[20];
stuList L,p;
cre_node(L);
cre_cla_info(L);
while(1)
{
system("cls");
print();
scanf("%d",&n);
if(n<1 || n>6)
break;
if(n==1)
{
system("cls");
puts("输入该学生学号:");
fflush(stdin);
gets(stuNumber);
if( !get_stu_info(L,stuNumber,p))
continue;
printf("该学生%s所在班级为:%s\n",p->stuNumber,p->classNumber);
puts("只录入该学生某一次的作业请输入1,要一起录入该学生10次作业请输入其他数字:");
scanf("%d",&m);
if(m==1)
{
puts("录入该学生第几次的作业?");
while(1)
{
scanf("%d",&i);
if(i<1 || i>10)
{
puts("范围只能是1~10,请重新输入:");
continue;
}
break;
}
printf("该学生第%d次作业分数为:%g,你要修改为?:\t",i,p->score[i-1]);
scanf("%lf",&p->score[i-1]);
puts("本次操作结果:");
printf("%s班%s学生第%d次作业分数为%g:\n",p->classNumber,p->stuNumber,i,p->score[i-1]);
puts("\n按任意一个键继续:");
getch();
}
else
for(i=0;i<10;i++)
{
printf("第%d次作业分数: ",i+1);
scanf("%lf",&p->score[i]);
}
}
else if(n==2)
{
system("cls");
puts("输入该学生学号:");
fflush(stdin);
gets(stuNumber);
i=get_stu_info(L,stuNumber,p);
if( !i)
continue;
average=0;
if(i==1)
{
printf("该学生所在班级班号为:%s,10次作业完成情况为:\n",p->classNumber);
for(i=0;i<10;i++)
{
average+=p->score[i];
printf("第%d次作业分数: %g\n",i+1,p->score[i]);
}
average/=10;
printf("\n该学生期末成绩为: %g\n\n",average);
}
puts("\n按任意一个键继续:");
getch();
}
else if(n==3)
{
system("cls");
puts("输入班级的班号:");
fflush(stdin);
gets(classNumber);
print_cla_info(L,classNumber);
}
else if(n==4)
{
system("cls");
puts("输入该学生学号:");
fflush(stdin);
gets(stuNumber);
if( !get_stu_info(L,stuNumber,p))
continue;
printf("该学生所在班级班号为:%s,当前作业完成情况为:\n",p->classNumber);
for(i=0;i<10;i++)
printf("第%d次作业分数:\t%g\n",i+1,p->score[i]);
while(1)
{
puts("要修改第几次作业?(输入数字1~10,输入其他数字结束):");
scanf("%d",&m);
if(m<1 || m>10)
break;
printf("修改该学生分数%g为:\t",p->score[m-1]);
scanf("%lf",&p->score[m-1]);
}
}
else if(n==5)
{
system("cls");
puts("输入该学生学号:");
fflush(stdin);
gets(stuNumber);
if( !get_stu_info(L,stuNumber,p))
continue;
printf("该学生所在班级班号为:%s,当前作业完成情况为:\n",p->classNumber);
for(i=0;i<10;i++)
printf("第%d次作业分数:\t%g\n",i+1,p->score[i]);
while(1)
{
puts("要删除第几次作业?(输入数字1~10,输入其他数字结束):");
scanf("%d",&m);
if(m<1 || m>10)
break;
p->score[m-1]=0;
}
}
else
{
system("cls");
count(L);
}
}
destroy_list(L);
puts("谢谢使用!按任意键退出:");
getch();
return 0;
}

哪里不懂可追问:
另外,团IDC网上有许多产品团购,便宜有口碑
温馨提示:内容为网友见解,仅供参考
第1个回答  2011-04-18
可否说细致一点,只能用C语言么,可以用VC么?显示,指在电脑显示?

留个联系方式,我传给你。追问

只用C语言 就是C++ 发到我邮箱吧 476292718@qq.com 快点 多谢~

追答

已发送,注意查收。

本回答被提问者采纳

求C语言程序高人给出如下试卷的答案,本人将不慎感激
2.int ,long,char, double, float 3.++i是在i的寄存器中直接加1,i++是把i放到临时寄存器中,再临时寄存器中加1,然后临时寄存器中的i值返回个i的寄存器。4.不是任何时候,当值小于255的时候可以的。因为char是1一个字节,最大255,int4个字节最大65535.读程题:1。a=10,b=8,c=16 ...

跪求高人用C语言帮我编一个题目:迭代法求x^5-x^4+4x^2-1=0的根算法...
x和x0不断的迭代.令f(x)=x^5-x^4+4x^2-1 则f'(x)=5x^4-4x^3+8x 有:x=x0-f(x)\/f'(x)收敛于:|x-x0|<e(有是一个很小的数,在这里取e为0.000001),具体代码如下:include "stdio.h"include "math.h"\/*牛顿迭代法求根*\/ void main(){ double x0,x;double f,g;x0=1...

计算机二级C语言考试重点以及复习技巧
1、语言的基本语法25分。主要有C语言的主要特点、各种数据类型、运算符与运算表达式、基本I\/O结构应用、基本的程序控制结构、宏的基本定义、文件的基本应用等。2、程序阅读题30分。考核的主要内容为:选择结构、循环结构的应用、数组的应用、指针特别是指针与字符数组的关系应用、函数应用(参数传输,全局...

自学c语言 零基础 看什么书 该怎么学
《《啊哈C语言:小学生坐在马桶上都可以读懂的C语言编程入门书》.zip》百度网盘资源免费下载 链接:https:\/\/pan.baidu.com\/s\/1aEXrb1oxnRmMWUlafELpfQ 提取码:pusr啊哈C语言:小学生坐在马桶上都可以读懂的C语言编程入门书

c语言程序设计 谭浩强 这本书完全看不懂
译器、make工具和其他知识来解决实际问题。这本书有什么特别之处?《嗨翻C语言》运用认知科学和学习理论的最新成果,精心为你打造了一次多感官的 学习体验,绝对能够嗨翻你的大脑,激发你的学习热情。它的特别之处是:用图片等可视化手段,提高学习效率;使用对话和有个性的叙述风格,讲故事而不是照本宣...

小虾自学谭浩强的“C语言程序设计”,现在已经把这本书看了四遍,内容...
你好,首先我也正在学C语言,我是计算机专业的学生。C语言单单看下子是没有用的,很快就会忘记;还有,就是你看了10遍也不如遍二十道题有用啊!!1、建议你先到pku acm上去做题(我也在做),先不做难题,刷了30道左右的水题后进行第二步;2、到百度里去搜:”ACM题型分类“,”ACM算法“;...

我想利用假期时间在网上找一些关于C语言程序设计的学习视频来看看_百 ...
鱼龙混杂,的确如此。去优酷看一下:http:\/\/www.soku.com\/search_video\/q_c%E8%AF%AD%E8%A8%80%20%E6%95%99%E7%A8%8B 视频效果普通,不过对于学习来讲,还可以。结合着一本比较好的c语言书来学最好了。谭浩强的那本就可以。

跪求高人解答C语言问题!!老出现Segmentation fault
char *p = "Hello World!";这句有问题 ,指针p指向的是常量区,就是说他的内容是不能改变的,所以不能转换大小写,改成这样就可以了:char p[] = "Hello World!";

C语言怎么学呀,我买了一本谭浩强的C程序设计第四版以,怎么像看天书一样...
C语言很重要。如果不懂C语言,你想写出优秀高效的程庌輌这简直就是天方夜谭。为什么C语言如此重要呢? 第一:C语言语法结构很简洁精妙,写出的程序也很高效,很便于描述算法,大多数的程序员愿意使用C语言去描述算法本身,所以,如果你想在程序设计方面有所建树,就必须去学它。 第二:C语言能够让你深入系统底层,你知...

我初学C语言,用C语言编出来的程序有问题 这个程序是输出三个数中的最...
应该是 scanf("%d %d %d",&a,&b,&c);,去掉前面的逗号 而且当a=b=c的时候,这个代码会出错,最好改成 if(a>=b&&a>=c) max=a;if(b>=a&&b>=c) max=b;if(c>=a&&c>=b) max=c;你的代码可以改成 include <stdio.h> void main(){ int a,b,c,max;scanf("%d %d %d",&...

相似回答