职业IT人-IT人生活圈

 找回密码
 成为会员
搜索
查看: 4250|回复: 3

学分管理程序设计 C语言初学者<转帖>

[复制链接]
zlyuanna 发表于 2006-11-1 17:41 | 显示全部楼层 |阅读模式
呵呵,我们这学期的课程设计,作为一个C语言初学者,在这里先献丑了  
要求设计一个学生的学分管理程序。

假设每位学生必须完成基础课50学分、专业课50学分、选修课24学分、人文

类课程8学分、实验性课程20学分才能够毕业。因此在管理学分时,要考虑每

个学分所属于的课程类别。
(6) 提供一些统计各类信息的功能。
CODE
#include <stdio.h>
#include <stdlib.h>
#include <windows.h>
#define MUNMAX 5
struct studentInfo{ //结构类型定义
int num;
float basic;
float spe;
float choose;
float peop;
float lib;
};
struct stuType{
studentInfo stu[MUNMAX];
int num;
};
void DisplayMenu();

int choiceItem();
int f(int);
void putone(struct stuType* as,int num);
void sum(struct stuType *p);
void Init(struct stuType*);
void PrintInfo(struct stuType);
void Print_aInfo(struct stuType,int);
void Input_aInfo(struct studentInfo*);
void Input_allInfo(struct stuType*,int num);
int Search(struct stuType);
void modify(struct stuType*);
void main()
{

struct stuType student;
int choice,index,a;
system(\"color 4e\");
Init(&student);

do{

  choice=choiceItem();
  switch (choice){
  case 0:printf(\"\\n再见!\");break;
  case 1:Input_allInfo(&student,MUNMAX);break;
  case 2:putone(&student,f(a)); break;
  case 3rintInfo(student);break;
  case 4:modify(&student);break;
  case 5:if ((index=Search(student))!=-1)
    Print_aInfo(student,index);
    else printf(\"\\n不存在这个学生.\");
    break;
  case 6:Init(&student);break;
  case 7:sum(&student);break;
  }
}while(choice);
}

void DisplayMenu() //显示菜单
{
COORD coordScreen = { 25, 3 };

HANDLE hCon = GetStdHandle(STD_OUTPUT_HANDLE);
SetConsoleCursorPosition(hCon, coordScreen);
printf(\"========= MENU =========\\n\");
printf(\"\\n (1) 通过键盘输入全部学生的学分;\");
printf(\"\\n (2) 通过键盘修改某位学生的学分;\");
printf(\"\\n (3) 显示该班所有学生学分完成情况;\");
printf(\"\\n (4) 全部课程的学分高低进行排序;\");
printf(\"\\n (5) 给定学号,显示该学生学分完成情况;\");
printf(\"\\n (6) 初始化程序;\");
printf(\"\\n (7) 一些统计信息;\");
printf(\"\\n (0) 退出系统;\");
printf(\"\\nchoice,please:\");
}

int choiceItem() //菜单选择
{
int choice;
do{
DisplayMenu();
scanf(\"%d\",&choice);

}while(choice<0||choice>7);
return choice;
}
int f(int a)
{
do
{
     printf(\"请输入要修改学生的学号(1-5):\");
     scanf(\"%d\",&a);
}while(a-1<0||a-1>4);
return a-1;
}
void Init(struct stuType* s) //初始化
{
s->num=0;
}

void Print_aInfo(struct stuType s,int index) //输出一个学生的信息
{
printf(\"\\n学号:%d\\n基础课学分:%-6.1f\\n专业课学分:%-6.1f\\n选修课学分:%-6.1f\\n人文类课程学分:%-6.1f\\n实验性课程学分:%-6.1f\\n \",s.stu[index].num,s.stu[index].basic,s.stu[index].spe,s.stu[index].choose,s.stu[index].peop,s.stu[index].lib);


}

void PrintInfo(struct stuType s) //输出所有学生的信息
{

if (s.num==0) {
printf(\"\\n无学生信息.\");
return;
}
for (int i=0;i<s.num;i++){
printf(\"\\n学号:%d\\n基础课学分:%-6.1f\\n专业课学分:%-6.1f\\n选修课学分:%-6.1f\\n人文类课程学分:%-6.1f\\n实验性课程学分:%-6.1f\\n \",s.stu.num,s.stu.basic,s.stu.spe,s.stu.choose,s.stu.peop,s.stu.lib);

}
}
void putone(struct stuType* as,int num)//修改一个学生信息
{
Input_aInfo(&as->stu[num]);
}



void Input_aInfo(struct studentInfo* as) //输入一个学生的信息
{
do
{
printf(\"请输入学生的学号:\");
scanf(\"%d\",&as->num);
}while(as->num<1||as->num>5);
printf(\"请输入学生的基础课成绩:\");
scanf(\"%f\",&as->basic);
printf(\"请输入学生的专业课成绩:\");
scanf(\"%f\",&as->spe);
printf(\"请输入学生的选修课成绩:\");
scanf(\"%f\",&as->choose);
printf(\"请输入学生的人文课成绩:\");
scanf(\"%f\",&as->peop);
printf(\"请输入学生的实验课成绩:\");
scanf(\"%f\",&as->lib);
printf(\"\\n\");
}


void Input_allInfo(struct stuType* s,int num) //输入多个学生的信息
{
printf(\"\\n请输入 %d 组信息.\\n\",num);
for (int i=0;i<num;i++){
if (s->num==MUNMAX){
  printf(\"\\n已经输入过成绩,不能重复输入,只能按2更改原始数据!\");
  break;
}
Input_aInfo(&s->stu[s->num++]);
}
}

int Search(struct stuType stu) //查找
{
int num;
do
{
printf(\"\\n输入学生学号(1-5):\");
scanf(\"%d\",&num);

}while(num<1||num>5);
for (int i=0;i<stu.num;i++)
if (stu.stu.num==num)
  return i;
return -1;
}

void modify(struct stuType *p) //排序
{int i,j;float temp;
for(i=0;i<4;i++)
for(j=0;j<4-i;j++)
{if(p->stu[j].basic>p->stu[j+1].basic){
   temp=p->stu[j].basic;
   p->stu[j].basic=p->stu[j+1].basic;
   p->stu[j+1].basic=temp;}
if(p->stu[j].spe>p->stu[j+1].spe){
   temp=p->stu[j].spe;
   p->stu[j].spe=p->stu[j+1].spe;
   p->stu[j+1].spe=temp;}
if(p->stu[j].choose>p->stu[j+1].choose){

   temp=p->stu[j].choose;
   p->stu[j].choose=p->stu[j+1].choose;
   p->stu[j+1].choose=temp;}
if(p->stu[j].peop>p->stu[j+1].peop){
   temp=p->stu[j].peop;
   p->stu[j].peop=p->stu[j+1].peop;
   p->stu[j+1].peop=temp;}
if(p->stu[j].lib>p->stu[j+1].lib){
   temp=p->stu[j].lib;
   p->stu[j].lib=p->stu[j+1].lib;
   p->stu[j+1].lib=temp;}
}

printf(\"全部课程成绩的排序结果为:\\n基础课:\");
for(i=0;i<5;i++)
  printf(\"%-6.1f\",p->stu.basic);
printf(\"\\n专业课:\");
for(i=0;i<5;i++)
  printf(\"%-6.1f\",p->stu.spe);
printf(\"\\n选修课:\");

for(i=0;i<5;i++)
  printf(\"%-6.1f\",p->stu.choose);
printf(\"\\n人文课:\");
for(i=0;i<5;i++)
  printf(\"%-6.1f\",p->stu.peop);
printf(\"\\n实验课:\");
for(i=0;i<5;i++)
  printf(\"%-6.1f\",p->stu.lib);
}
void sum(struct stuType *p)
{int i,b1=0,b2=0,s1=0,s2=0,c1=0,c2=0,p1=0,p2=0,l1=0,l2=0;
for(i=0;i<4;i++)
{if(p->stu.basic>=90.0)
  b1++;
  if(p->stu.basic<50.0)
  b2++;
  if(p->stu.spe>=90.0)
  s1++;
  if(p->stu.spe<50.0)
  s2++;

  if(p->stu.choose>=90.0)
  c1++;
  if(p->stu.choose<24.0)
  c2++;
  if(p->stu.peop>=90.0)
  p1++;
  if(p->stu.peop<8.0)
  p2++;
  if(p->stu.lib>=90.0)
  l1++;
  if(p->stu.lib<20.0)
  l2++;
}
printf(\"\\n基础课程90学分以上的有%d个,不及格的有%d个\",b1,b2);
printf(\"\\n专业课程90学分以上的有%d个,不及格的有%d个\",s1,s2);
printf(\"\\n选修课程90学分以上的有%d个,不及格的有%d个\",c1,c2);
printf(\"\\n人文课程90学分以上的有%d个,不及格的有%d个\",p1,p2);
printf(\"\\n实验课程90学分以上的有%d个,不及格的有%d个\",l1,l2);
}


该程序应该主要具有下列功能:

(1) 通过键盘输入某位学生的学分;

(2) 给定学号,显示某位学生的学分完成情况;

(3) 给定某个班级的班号,显示该班所有学生学分完成情况;

(4) 给定某位学生的学号,修改该学生的学分信息;

(5) 按照某类课程的学分高低进行排序;
PS:本来想用点winAPI来改变字幕显示位置的,可是请教了N多人后还是自己悟性差,咋弄都弄不好.同时该程序有不少bug.希望高手给予指出
百晨 发表于 2006-11-2 12:54 | 显示全部楼层
那天有空去试试呵呵!
joe 发表于 2008-6-23 11:20 | 显示全部楼层
顶起.
一路顺风 发表于 2009-3-8 19:28 | 显示全部楼层
支持!
您需要登录后才可以回帖 登录 | 成为会员

本版积分规则

QQ|手机版|小黑屋|网站帮助|职业IT人-IT人生活圈 ( 粤ICP备12053935号-1 )|网站地图
本站文章版权归原发布者及原出处所有。内容为作者个人观点,并不代表本站赞同其观点和对其真实性负责,本站只提供参考并不构成任何投资及应用建议。本站是信息平台,网站上部分文章为转载,并不用于任何商业目的,我们已经尽可能的对作者和来源进行了通告,但是能力有限或疏忽造成漏登,请及时联系我们,我们将根据著作权人的要求立即更正或者删除有关内容。

GMT+8, 2024-5-6 17:47 , Processed in 0.142973 second(s), 20 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表