C++高手进,代码300行左右、

一、题目分析 为方便学生管理,创建一个学生信息管理系统。本系统中我们假设学生信息只包括学号、姓名、电话号码等信息(信息内容可根据需要进行添加)。此系统最多可包括一百个学生信息。程序实现菜单式管理,选择任意菜单实现相应功能。主要功能包括: 创建学生管理系统, 显示信息功能, 查询信息功能(包括按学号查询和按姓名查询两种查询方式), 修改信息功能, 添加信息功能, 删除信息功能(按学号、按姓名), 排序功能(按学号升、降,按姓名升、降)。 系统程序用C语言编写,分模块编写,主模块下有八个子模块,其中三个子模块又有子模块。如下图所示: 主模块 显示主菜单 创建信息管理系统 显示信息管理系统 查询信息管理系统 修改信息管理系统 添加信息管理系统 删除信息管理系统 排序信息管理系统 按学号查询 按姓名查询 按学号删除 按姓名删除 按学号排序 按姓名排序 各模块负责编写:王伟:主模块、显示、创建、显示菜单、排序 龚腾飞:查询、修改、添加、删除

第1个回答  2014-06-17
#include #include #include void select(); /*自定义函数的全局声明*/ void input(); void output(); void sort(); void search(); void modify(); void deleted(); void save(); void load(); struct student { int number; char name[9]; char sex; char xy[20]; char zy[20]; int classes; double jcj; double pcj; double zcj; }; struct student a[40]; void main() { select(); //调用选择函数 } void select() { int n; system("cls"); printf("|--------------------------------------------------------------|\n"); printf("| 主菜单 |\n"); printf("| 1. 输入功能 |\n"); printf("| 2. 输出功能 |\n"); printf("| 3. 排序功能 |\n"); printf("| 4. 查询功能 |\n"); printf("| 5. 修改功能 |\n"); printf("| 6. 删除功能 |\n"); printf("| 7. SAVE功能 |\n"); printf("| 8. LOAD功能 |\n"); printf("| 9. 退出程序 |\n"); printf("|--------------------------------------------------------------|\n"); printf(" 请你选择功能:"); scanf("%d",&n); switch(n) { case 1: input();select();break; /*当调用完输入函数之后,回到主菜单的函数select函数*/ case 2: output();select();break; case 3: sort();select();break; case 4: search();select();break; case 5: modify();select();break; case 6: deleted();select();break; case 7: save();select();break; case 8: load();select();break; case 9: exit(0);break; } getchar(); getchar(); system("pause"); } void input() { int i,n; system("cls"); printf(" welcome to 输入功能\n\n\n"); for(i=0;i<=39;i++) { printf("------------------------------------------------------------|\n"); printf("| 是否要给1个同学做信息的输入 |\n"); printf("| 1. 输入 |\n"); printf("| 2. 结束输入 |\n"); printf("------------------------------------------------------------|\n"); printf(" 请你输入你的选择:"); scanf("%d",&n); if(n==2) break; printf("学号:"); scanf("%d",&a[i].number); getchar(); printf("姓名:"); gets(a[i].name); printf("性别:"); a[i].sex=getchar(); getchar(); printf("学院:"); gets(a[i].xy); printf("专业:"); gets(a[i].zy); printf("班级:"); scanf("%d",&a[i].classes); printf("卷面成绩:"); scanf("%lf",&a[i].jcj); printf("平时成绩:"); scanf("%lf",&a[i].pcj); } getchar(); getchar(); system("pause"); } void output() { int i; system("cls"); printf(" welcome to 输出功能\n\n\n"); printf("%-9s","学号"); printf("%-9s","姓名"); printf("%-5s","性别"); printf("%-20s","学院"); printf("%-20s","专业"); printf("%-5s","班级"); printf("%-9s","卷面成绩"); printf("%-9s","平时成绩"); printf("%-9s","总成绩"); printf("\n"); for(i=0;i<=39;i++) { a[i].zcj=a[i].jcj*0.6+a[i].pcj; if(a[i].number == 0) break; printf("%-9d",a[i].number); printf("%-9s",a[i].name); printf("%-5c",a[i].sex); printf("%-20s",a[i].xy); printf("%-20s",a[i].zy); printf("%-5d",a[i].classes); printf("%-9.2lf",a[i].jcj); printf("%-9.2lf",a[i].pcj); printf("%-9.2lf",a[i].zcj); printf("\n"); } getchar(); getchar(); system("pause"); } void sort() { int i,j,n; struct student t; system("cls"); printf(" welcome to 排序功能\n\n\n"); printf("------------------------------------------------------------|\n"); printf("| 排序菜单 |\n"); printf("| 1. 按总分总高到低排序输出 |\n"); printf("| 2. 按总分总低到高排序输出 |\n"); printf("| 3. 退出排序功能 |\n"); printf("------------------------------------------------------------|\n"); printf(" 请你输入你的选择:"); scanf("%d",&n); switch(n) { case 1: for(j=38;j>=0;j--) { for(i=0;i<=j;i++) { if(a[i].number == 0 || a[i+1].number == 0) break; else { if(a[i].zcj < a[i+1].zcj) { t=a[i]; a[i]=a[i+1]; a[i+1]=t; } } } } break; case 2: for(j=38;j>=0;j--) { for(i=0;i<=j;i++) { if(a[i].number == 0 || a[i+1].number == 0) break; else { if(a[i].zcj > a[i+1].zcj) { t=a[i]; a[i]=a[i+1]; a[i+1]=t; } } } } break; case 3: select(); break; } printf("%-9s","学号"); printf("%-9s","姓名"); printf("%-5s","性别"); printf("%-20s","学院"); printf("%-20s","专业"); printf("%-5s","班级"); printf("%-9s","卷面成绩"); printf("%-9s","平时成绩"); printf("%-9s","总成绩"); printf("\n"); for(i=0;i<=39;i++) { a[i].zcj=a[i].jcj*0.6+a[i].pcj; if(a[i].number == 0) break; printf("%-9d",a[i].number); printf("%-9s",a[i].name); printf("%-5c",a[i].sex); printf("%-20s",a[i].xy); printf("%-20s",a[i].zy); printf("%-5d",a[i].classes); printf("%-9.2lf",a[i].jcj); printf("%-9.2lf",a[i].pcj); printf("%-9.2lf",a[i].zcj); printf("\n"); } getchar(); getchar(); system("pause"); } void search() { int i,n; char search_name[9]; system("cls"); printf(" welcome to 查询功能\n\n\n"); printf("------------------------------------------------------------|\n"); printf("| 查询菜单 |\n"); printf("| 1. 按姓名查询 |\n"); printf("| 2. 按性别查询 |\n"); printf("| 3. 按学号查询 |\n"); printf("| 4. 按专业查询 |\n"); printf("| 5. 按学院查询 |\n"); printf("| 6. 按总成绩及格同学查询 |\n"); printf("| 7. 退出查询功能 |\n"); printf("------------------------------------------------------------|\n"); printf(" 请你输入你的选择:"); scanf("%d",&n); getchar(); switch(n) { case 1: printf("\n\n\n请你输入要查询某同学的姓名:"); gets(search_name); printf("%-9s","学号"); printf("%-9s","姓名"); printf("%-5s","性别"); printf("%-20s","学院"); printf("%-20s","专业"); printf("%-5s","班级"); printf("%-9s","卷面成绩"); printf("%-9s","平时成绩"); printf("%-9s","总成绩"); printf("\n"); for(i=0;i<=39;i++) { if(a[i].number==0) break; else { if(strcmp(a[i].name,search_name) == 0) { printf("%-9d",a[i].number); printf("%-9s",a[i].name); printf("%-5c",a[i].sex); printf("%-20s",a[i].xy); printf("%-20s",a[i].zy); printf("%-5d",a[i].classes); printf("%-9.2lf",a[i].jcj); printf("%-9.2lf",a[i].pcj); printf("%-9.2lf",a[i].zcj); printf("\n"); } } } break; case 2: break; } getchar(); getchar(); system("pause"); } void modify() { int i,n,m; int modify_number; /* 输入修改对象的学号*/ system("cls"); printf(" welcome to 修改功能\n\n\n"); printf("------------------------------------------------------------|\n"); printf("| 修改菜单 |\n"); printf("| 1. 修改全部信息 |\n"); printf("| 2. 修改具体某项信息 |\n"); printf("| 3. 退出修改功能 |\n"); printf("------------------------------------------------------------|\n"); printf(" 请你输入你的选择:"); scanf("%d",&n); getchar(); switch(n) { case 1: printf("\n\n请你输入你要修改的对象的学号:"); scanf("%d",&modify_number); for(i=0;i<=39;i++) { if(modify_number == a[i].number) { printf("学号:"); scanf("%d",&a[i].number); getchar(); printf("姓名:"); gets(a[i].name); printf("性别:"); a[i].sex=getchar(); getchar(); printf("学院:"); gets(a[i].xy); printf("专业:"); gets(a[i].zy);

记得采纳啊本回答被提问者采纳
第2个回答  2019-04-19
哈夫曼编码器
/*********************************************************************************************
* 哈夫曼编/译码器 *
* desciption: 用哈夫曼码实现 编码 和 译码的 任务 *
**********************************************************************************************/
#include<string.h>
#include<conio.h>
#include<stdio.h> //输入和输出函数的头文件
#include<stdlib.h> //exit函数的头文件
#include<malloc.h> //malloc函数的头文件
#include<iostream>
//**********************************************************
#define OVERFLOW -2 //溢出时的值为-2
#define OK 1 //成功时时的值为1
#define ERROR 0 //不成功时时的值为0
//**********************************************************
typedef int ElemType; //ElemType 任意的数据类型
typedef int Status; //ElemType 任意的数据类型
//
//**********************************************************
//********************Huffmantree的结点结构***************************
typedef struct{
int weight;
int parent,lchild,rchild;
}HTNode,*HuffmanTree;
typedef char **HuffmanCode;
//**********************************************************
#define CHLENGTH 27 //8
#define WLENGTH 27 //8
void HuffmanCoding(HuffmanTree &,HuffmanCode &,int *,int );
void Select(HuffmanTree ,int ,int &,int &);
void HuffmanDecoding(char *,HuffmanTree ,HuffmanCode ,int *,int *,int );
void Treeprinting(char *,HuffmanTree ,HuffmanCode ,int *,int *,int );
void preorder(HuffmanTree HT,int root,int i,int sum,int *,int *,FILE *);
int main(void){
int ch[CHLENGTH]={' ','A','B','C','D','E','F','G',
'H','I','J','K','L','M','N',
'O','P','Q','R','S','T','U',
'V','W','X','Y','Z'}; //
int w[WLENGTH]={186,64,13,22,32,103,21,15,47,57,
1,5,32,20,57,63,15,1,48,51,80,
23,8,18,1,16,1}; //
/* int ch[CHLENGTH]={'T','H','I','S',' ','P','R','O','G','R','A','M',' ',
'I','S',' ','M','Y',' ','F','A','V','O','R','I','T','E'};
int w[WLENGTH]={80,47,57,51,186,15,48,63,15,48,64,20,186,57,51,186,20,16,21,
64,8,63,48,57,80,103};
*/
int i=1;
// int ch[CHLENGTH]={5,29,7,8,14,23,3,11};
char buff[1025];
// int w[WLENGTH]={500,2900,700,800,1400,2300,300,1100};
char c,ch1;
FILE *fp_1,*fp_2;
int flag=1,legth=0;
HuffmanTree HT;
HuffmanCode HC;
while(1){
printf("*********************************************************\n");
printf("(1) e 进行编码\n");
printf("(2) d 译码 工作\n");
printf("(3) p 打印CodeFile.txt\n");
printf("(4) t 打印HuffmanTree \n");
printf("(5) q 退出程序\n");
printf("*********************************************************\n");
scanf("%c",&c);
getchar();
switch(c){
case 'e':
HuffmanCoding(HT,HC,w,WLENGTH); //进行编码
if((fp_1=fopen("CodeFile.txt","w")) == NULL){
printf("can not open the file\n");
getch();
exit(0);
}
for(i=1;i<WLENGTH+1;i++){
printf("%c",ch[i-1]);
//putchar(ch[i-1]);
printf(" ");
fputs(HC[i],fp_1); //存储在文件中
puts(HC[i]); //打印在屏幕上
}
fclose(fp_1);//
break;
case 'd':
if((fp_1=fopen("CodeFile.txt","r")) == NULL){//此处 以只读方式 打开 是 "r "
printf("can not open the file\n");
getch();
exit(0);
}
i=0;
while( !feof(fp_1) ){
fgets(buff,1024,fp_1);
//legth=strlen(buff);//求出这个串的长度
HuffmanDecoding(buff,HT,HC,w,ch,WLENGTH);
}
break;//译码 工作
case 'p':
i=0;//每50行 打印的
if((fp_1=fopen("CodeFile.txt","r")) == NULL){//此处 以只读方式 打开 是 "r "
printf("can not open the file\n");
getch();
exit(0);
}
if((fp_2=fopen("CodePin.txt","w")) == NULL){//
printf("can not open the file\n");
getch();
exit(0);
}
ch1=fgetc(fp_1);
while( !feof(fp_1) ){ //让读者看一遍这个文件 也方便我 调试时的检查
i++;
putchar(ch1);
fprintf(fp_2,"%c",ch1);
if(i%50 == 0) {
printf("\n");
fprintf(fp_2,"%c",'\n');
}
ch1=fgetc(fp_1);
}
printf("\n");
//打印CodeFile.txt
break;
case 't': Treeprinting(buff,HT,HC,w,ch,WLENGTH);
//打印HuffmanTree
break;
case 'q': exit(0);
}
}
/*
i=1;
//HuffmanDecode
while( !feof(fp_1) ) {
buff[i]=fgetc(fp_1);
i++;
}
fclose(fp_1);
*/
}
void HuffmanCoding(HuffmanTree &HT, HuffmanCode &HC, int *w, int n) {
// 算法6.12
// w存放n个字符的权值(均>0),构造哈夫曼树HT,
// 并求出n个字符的哈夫曼编码HC
int i, j, m, s1, s2, start;
char *cd;
int c, f;
if (n<=1) return;
m = 2 * n - 1;
HT = (HuffmanTree)malloc((m+1) * sizeof(HTNode)); // 0号单元未用
for (i=1; i<=n; i++) { //初始化
HT[i].weight=w[i-1];
HT[i].parent=0;
HT[i].lchild=0;
HT[i].rchild=0;
}
for (i=n+1; i<=m; i++) { //初始化
HT[i].weight=0;
HT[i].parent=0;
HT[i].lchild=0;
HT[i].rchild=0;
}
printf("\n哈夫曼树的构造过程如下所示:\n");
printf("HT初态:\n 结点 weight parent lchild rchild");
for (i=1; i<=m; i++)
printf("\n%4d%8d%8d%8d%8d",i,HT[i].weight,
HT[i].parent,HT[i].lchild, HT[i].rchild);
// printf(" 按任意键,继续 ...");
//getch();
for (i=n+1; i<=m; i++) { // 建哈夫曼树
// 在HT[1..i-1]中选择parent为0且weight最小的两个结点,
// 其序号分别为s1和s2。
Select(HT, i-1, s1, s2);
HT[s1].parent = i; HT[s2].parent = i;
HT[i].lchild = s1; HT[i].rchild = s2;
HT[i].weight = HT[s1].weight + HT[s2].weight;
printf("\nselect: s1=%d s2=%d\n", s1, s2);
printf(" 结点 weight parent lchild rchild");
for (j=1; j<=i; j++)
printf("\n%4d%8d%8d%8d%8d",j,HT[j].weight,
HT[j].parent,HT[j].lchild, HT[j].rchild);
// printf(" 按任意键,继续 ...");
//getch();
}
//--- 从叶子到根逆向求每个字符的哈夫曼编码 ---
HC = (HuffmanCode)malloc((n+1)*sizeof(char *));
cd = (char *)malloc(n*sizeof(char)); // 分配求编码的工作空间
cd[n-1] = '\0'; // 编码结束符。
for (i=1; i<=n; ++i) { // 逐个字符求哈夫曼编码
start = n-1; // 编码结束符位置
for (c=i, f=HT[i].parent; f!=0; c=f, f=HT[f].parent)
// 从叶子到根逆向求编码
if (HT[f].lchild==c) cd[--start] = '0';
else cd[--start] = '1';
HC[i] = (char*)malloc((n-start)*sizeof(char));
// 为第i个字符编码分配空间
strcpy(HC[i], &cd[start]); // 从cd复制编码(串)到HC
}
printf("\n");
free(cd); // 释放工作空间
} // HuffmanCoding
void Select(HuffmanTree HT,int x,int &s1,int &s2){
int firstmin=HT[1].weight,secondmin=HT[1].weight; //第一个权值
int firstnummin=1,secondnummin=1;
int i=1,count=1,j=1;
while(1){
if(HT[i].parent == 0){
//为其赋初值
firstmin=HT[i].weight;
secondmin=HT[i].weight;
firstnummin=i;
secondnummin=i;
j=i;
break;
}
i++;
}
/*
for(i=1;i<x;i++){
if(HT[i].weight < firstmin && HT[i].parent == 0){
firstmin=HT[i].weight;
firstnummin=i;
if(secondmin < firstmin){
secondmin = firstmin;
secondnummin=i;
}
}*/
for(++i;i<=x;i++){
//取出最小值
if(HT[i].weight < firstmin && HT[i].parent == 0){
firstmin=HT[i].weight;
firstnummin=i;//返回号
}
}
i=j;
for(++i;i<=x;i++){
//取出次小值
if(HT[i].weight > firstmin && HT[i].weight < secondmin && HT[i].parent == 0){
//if( HT[i].parent == 0){
//if( i< (int)(WLENGTH/2) ){
secondmin=HT[i].weight;
secondnummin=i;//返回号
//}
//}
}
else if(secondmin == firstmin && HT[i].parent == 0){
//特殊情况 给与考虑 (就是当这俩权值相等的时候)
secondnummin=i;
break;
}
}
s1=firstnummin;
s2=secondnummin;
}
void HuffmanDecoding(char *buff,HuffmanTree HT,HuffmanCode HC,int *w,int *ch,int n){
int root=0,i=0,j=0,lchild=0,rchild=0,k=1;
char result[100];
FILE *fp;
root=2*n-1;
if((fp=fopen("TextFile.txt","w")) == NULL){
printf("can not open the file\n");
exit(0);
}
while(buff[i]!='\0'){
if(buff[i] == '0' ){
result[j]=buff[i];//把编码存入这个 结果的数组中
j++;
root=HT[root].lchild;//一种递归的方法 把左子树的root
//更新成新的root
if( HT[root].lchild == 0 ){
//。。当左子树等于空时找到了
// j=0;
/* while(w[j] != HT[root].weight) {
j++;
}*/
result[j]='\0';
while( strcmp(HC[k],result) != 0) k++;
printf("%c",ch[k-1]);
fprintf(fp,"%c",ch[k-1]);//写入文件
j=0;
k=1;
root=2*n-1;
++i;
}
else if(root != 2*n-1) ++i;
}
else if(buff[i] == '1' ){
root=HT[root].rchild;
result[j]=buff[i];
j++;
if(HT[root].rchild == 0 ){
//j=0;
/*while(w [j] != HT[root].weight) {
j++;
}
*/
result[j]='\0';
while( strcmp(HC[k],result) != 0) k++;
printf("%c",ch[k-1]);
fprintf(fp,"%c",ch[k-1]);
j=0;k=1;
root=2*n-1;
++i;
}
else if(root != 2*n-1) ++i;
}
}
fclose(fp);
printf("\n---------------------------------------------\n");
}
void Treeprinting(char *buff,HuffmanTree HT,HuffmanCode HC,int *w,int *ch,int n){
int root=0,i=1,j=0,lchild=0,rchild=0,k=1,space=0;//space是空格数
// char result[100];
FILE *fp;
if((fp=fopen("TextFile.txt","w")) == NULL){
printf("can not open the file\n");
exit(0);
}
root=2*n-1;
preorder(HT,root,i,i,ch,w,fp);
fclose(fp);
printf("\n---------------------------------------------\n");
}
void preorder(HuffmanTree HT,int root,int i,int sum,int *ch,int *w,FILE *fp){
int lchild=0,rchild=0;
if(HT == NULL){
return;
}
if(i == 1) {
sum=sum+i;
while(i<sum){
printf(" ");
fprintf(fp," ");
i++;
}
i=1;
if( HT[root].lchild == 0 && HT[root].rchild == 0 ){
fprintf(fp,"*%d\n",HT[root].weight);
printf("*%d\n",HT[root].weight);
}
if( HT[root].lchild != 0 || HT[root].rchild != 0 ){
fprintf(fp,"%d\n",HT[root].weight);
printf("%d\n",HT[root].weight);
}
}
if(i == 2) {
sum=sum+i;
while(i<sum){
printf(" ");
fprintf(fp," ");
i++;
}
}
}
相似回答