师生管理系统
① 一个学生信息管理系统
import java.awt.BorderLayout;
import java.awt.Checkbox;
import java.awt.CheckboxGroup;
import java.awt.Container;
import java.awt.Font;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.ItemEvent;
import java.awt.event.ItemListener;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTextField;
//录入的信息包括学号、姓名、性别、出生日期、是否联合培养等
public class 学生信息图形界面 extends JFrame implements ActionListener {
public 学生信息图形界面() { //构造方法
//界面显示问题
super("学生信息图形界面");
setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
setSize(320, 300);
setVisible(true);
Container content = getContentPane();
JPanel jp1 = new JPanel(); //创建一个面板
JLabel label = new JLabel("欢迎使用学生信息管理系统"); //欢迎界面的欢迎语句
label.setFont(new Font("楷体_GB2312", Font.BOLD, 20)); //设置显示的字体
jp1.add(label); //将标签添加到面板jp1中
JPanel jp2 = new JPanel(); //创建一个面板,用于摆放提示各种功能的标签
JLabel label1 = new JLabel("请输入学生的详细资料:"); //输入提示输入的语言:
label1.setFont(new Font("楷体_GB2312", Font.BOLD, 18)); //设置显示的字体
JLabel label2 = new JLabel("学 生 学 号:"); //提示各种输入内容的标签
label2.setFont(new Font("楷体_GB2312", Font.BOLD, 18)); //设置显示的字体t
JTextField field1=new JTextField(10); //10为学号长度,可自行设定
JLabel label3 = new JLabel("学 生 姓 名:"); //提示输入学生姓名的标签
label3.setFont(new Font("楷体_GB2312", Font.BOLD, 18)); //设置显示的字体
JTextField field2=new JTextField(10); //10为姓名长度,可自行设定
JLabel label4 = new JLabel("学 生 性 别: "); //提示输入学生性别的标签
label4.setFont(new Font("楷体_GB2312", Font.BOLD, 18)); //设置显示的字体
CheckboxGroup group1 = new CheckboxGroup(); //创建一个复选框用于选择某一功能
Checkbox check11 = new Checkbox("男",true,group1); //添加选项到复选框中
check11.setFont(new Font("楷体_GB2312", Font.BOLD, 18)); //设置显示的字体
check11.addItemListener(new CheckHandler1(1)); //给相应复选框添加事件监听器
Checkbox check12 = new Checkbox("女",false,group1); //添加选项到复选框中
check12.setFont(new Font("楷体_GB2312", Font.BOLD, 18)); //设置显示的字体
check12.addItemListener(new CheckHandler1(2)); //给相应复选框添加事件监听器
JLabel label5 = new JLabel("出 生 日 期:"); //提示输入出生日期的标签
label5.setFont(new Font("楷体_GB2312", Font.BOLD, 18)); //设置显示的字体
JTextField field3=new JTextField("2000",3); //3为姓名长度,可自行设定
JLabel label51 = new JLabel("年");
label51.setFont(new Font("楷体_GB2312", Font.BOLD, 18)); //设置显示的字体
JTextField field4=new JTextField("01",2); //2为姓名长度,可自行设定
JLabel label52 = new JLabel("月");
label52.setFont(new Font("楷体_GB2312", Font.BOLD, 18)); //设置显示的字体
JTextField field5=new JTextField("01",2); //2为姓名长度,可自行设定
JLabel label53 = new JLabel("日");
label53.setFont(new Font("楷体_GB2312", Font.BOLD, 18)); //设置显示的字体
JLabel label6 = new JLabel("联合培养:"); //提示选择联合培养与否的标签
label6.setFont(new Font("楷体_GB2312", Font.BOLD, 18)); //设置显示的字体
CheckboxGroup group2 = new CheckboxGroup(); //创建一个复选框用于选择某一功能
Checkbox check21 = new Checkbox("是",true,group2); //添加选项到复选框中
check21.setFont(new Font("楷体_GB2312", Font.BOLD, 18)); //设置显示的字体
check21.addItemListener(new CheckHandler2(1)); //给相应复选框添加事件监听器
Checkbox check22 = new Checkbox("否",false,group2); //添加选项到复选框中
check22.setFont(new Font("楷体_GB2312", Font.BOLD, 18)); //设置显示的字体
check22.addItemListener(new CheckHandler2(2)); //给相应复选框添加事件监听器
//添加组件到面板容器中
jp2.add(label1);
jp2.add(label2);
jp2.add(field1);
jp2.add(label3);
jp2.add(field2);
jp2.add(label4);
jp2.add(check11); jp2.add(check12);
jp2.add(label5);
jp2.add(field3);jp2.add(label51); jp2.add(field4);jp2.add(label52); jp2.add(field5);jp2.add(label53);
jp2.add(label6);
jp2.add(check21); jp2.add(check22);
content.add(jp1, BorderLayout.NORTH); //分别添加面板到容器中
content.add(jp2, BorderLayout.CENTER); //分别添加面板到容器中
}
public void actionPerformed(ActionEvent e) {
// 事件响应处理
}
class CheckHandler1 implements ItemListener //复选框键的事件响应类
{
private int sel;
CheckHandler1(int select)
{
sel = select;
}
public void itemStateChanged(ItemEvent e)
{
switch(sel)
{
case 1:method1();break; //调用选择的相应功能的方法
case 2:method2();break; //调用选择的相应功能的方法
}
}
private void method1() { //事件响应方法
}
private void method2() { // 事件响应方法
}
}
class CheckHandler2 implements ItemListener //复选框键的事件响应类
{
private int sel;
CheckHandler2(int select)
{
sel = select;
}
public void itemStateChanged(ItemEvent e)
{
switch(sel)
{
case 1:method1();break; //调用选择的相应功能的方法
case 2:method2();break; //调用选择的相应功能的方法
}
}
private void method1() { //事件响应方法
}
private void method2() { //事件响应方法
}
}
//测试
public static void main(String[] args) {
学生信息图形界面 界面 = new 学生信息图形界面();
界面.setVisible(true);
}
}
② 实现简单的学生管理系统
该不会是c语言的课程设计吧,现在的教学还真是极端类似,当时学c我的课程设计也是这种,题目文字表述几乎不变,不过同学如果你是认真想学到c的话,你还是自己认真投入去编写吧,
这个题目要编写系统这几乎是包含C语言最简单也是最基础的几条命令,如果学了c,连最基础的都写不出来。那也就白学了
下面是一个当时没完成的半成品,刚好电脑里还保存这个文件,我不是专业学C的,下面的程序仅供你参考
#define N 2 //N为输入的学生数量
#include<stdio.h>
struct student
{
int num[10];
char sex[2];
char name[15];
char cla[12];
int score[3];
}stu[N+N+1];
void input(struct student stu[])
{
int i,j;
for(i=0;i<N;i++)
{
printf("\n请输入第%d个同学的信息:\n",i+1);
printf("\n学号:");
scanf("%d",stu[i].num);
printf("\n性别,男(女)性用b(g)表示:");
scanf("%s",stu[i].sex);
printf("\n姓名:");
scanf("%s",stu[i].name);
printf("\n班级:");
scanf("%s",stu[i].cla);
for(j=0;j<3;j++)
{
printf("\nscore %d:",j+1);
scanf("%d",&stu[i].score[j]);
}
printf("\n该学生输入完成!\n");
}
printf("\n 全部输入结束!\n");
}
void main()
{
void pp();
void input();
void xg();
void print();
void cl();
pp();
printf("\n");
printf("\n 操作完成,关闭窗口退出!\n\n");
}
void print(struct student stu[])
{
int i,j;
printf("\n学号 姓名 性别 班级 score1 score2 score3\n");
for(i=0;i<N;i++)
{
printf("%-15d%-15s%-10s%-10s",*stu[i].num,stu[i].name,stu[i].sex,stu[i].cla);
for(j=0;j<3;j++)
printf("%-9d",stu[i].score[j]);
printf("\n");
}
}
void pp()
{
int s ;
printf(" ★小型学生信息管理系统★\n");
do
{
printf("\n 主菜单\n");
printf("\n 1.数据输入 2.数据修改 3.数据处理 4.数据输出 5.退出\n");
printf("\n请输入您要执行的命令,用命令前的数字表示:");
scanf("%d",&s);
switch(s)
{
case 1 : input(stu);break;
case 2 : xg(stu);break;
case 3 : cl();break;
case 4 : print(stu);break;
}
}
while(s!=5);
}
void xg(struct student stu[])
{
int n,i,j,e;char f;
printf("\n请输入要修改的学生学号:");
scanf("%d",&n);getchar();
for(i=0;i<N;i++)
/*if(n!=*stu[i].num)
{
if(i==N-1)
printf("\n查无此学号!\n");
}
else*/
{
printf("\n修改过后原有数据将消失,确定?(y/n)");
scanf("%c",&f);
if(f=='y')
{
for(i=0;i<N;i++)
{
if(n==*stu[i].num)
{
do
{
printf("\n 【数据修改】\n");
printf("\n1.学号 2.姓名 3.性别 4.班级 5.成绩 6.退出修改\n");
printf("\n重新选择输入该学生数据,用命令前的数字表示:");
scanf("%d",&e);
switch(e)
{
case 1 : printf("\n学号:");scanf("%d",stu[i].num);break;
case 2 : printf("\n姓名:");scanf("%s",stu[i].name);break;
case 3 : printf("\n性别,男(女)性用b(g)表示:");scanf("%s",stu[i].sex);break;
case 4 : printf("\n班级:");scanf("%s",stu[i].cla);break;
case 5 : for(j=0;j<3;j++)
{
printf("\nscore %d:",j+1);
scanf("%d",&stu[i].score[j]);
}break;
}
}
while(e!=6);
printf(" \n修改完成!\n");
}
}
}
printf("\n修改结束!\n");
}
}
void cl(struct sudent stu[])
{
void px();
void cx();
void tj();
int q;
do
{
printf("\n 【数据处理】\n");
printf("\n 1.排序 2.查询 3.统计 4.返回上层\n");
printf("\n请输入您要执行的命令,用命令前的数字表示:");
scanf("%d",&q);
switch(q)
{
case 1 : px(stu);break;
case 2 : cx(stu);break;
case 3 : tj(stu);break;
}
}
while(q!=4);
}
void px()
{
int l,k,i,j;
for(l=0;l<N;l++)
stu[N+l]=stu[l];
for(l=0;l<N-1;l++)
for(k=0;k<N-l-1;k++)
if(*stu[k+N].num>*stu[N+k+1].num)
{
stu[N+N]=stu[N+k];stu[N+k]=stu[N+1+k];stu[N+1+k]=stu[N+N];
}
printf("\n学号 姓名 性别 班级 score1 score2 score3\n");
for(i=N;i<N+N;i++)
{
printf("%-15d%-15s%-10s%-10s",*stu[i].num,stu[i].name,stu[i].sex,stu[i].cla);
for(j=0;j<3;j++)
printf("%-9d",stu[i].score[j]);
printf("\n");
}
printf("\n 排序完成!\n");
}
void cx()
{
int n,i,j;
printf("\n请输入您要查询的学生学号:");
scanf("%d",&n);
for(i=0;i<N;i++)
if(n!=*stu[i].num)
{
if(i==N-1)
printf("\n查无此学号!");
}
else
{
printf("\n学号 姓名 性别 班级 score1 score2 score3\n");
printf("%-15d%-15s%-10s%-10s",*stu[i].num,stu[i].name,stu[i].sex,stu[i].cla);
for(j=0;j<3;j++)
printf("%-9d",stu[i].score[j]);
printf("\n");
}
}
void tj()
{
void pjf();
void loss();
int t;
do
{
printf("\n 【统计】\n");
printf("\n1.输出各学生的平均分 2.存在不及格科目的学生 3.返回上层\n");
printf("\n请输入您要执行的命令,用命令前的数字表示:");
scanf("%d",&t);
switch(t)
{
case 1 : pjf();break;
case 2 : loss();break;
}
}
while(t!=3);
}
void pjf()
{
}
void loss()
{
}
③ 师生互动平台管理系统 尽量接近,跪求啊!
网上很多啊 (努力不做木头)Q
④ 学生管理系统
#include<iostream>
#include<cstring>
#include<fstream>
using namespace std;
int num=0;
const int MAX_NUM_OF_STUDENTS=1000;
struct Student
{
char name[20],sex[10],bonetime[20],address[20],mail[20];
int no,age,phone;
};
Student students[MAX_NUM_OF_STUDENTS];
Student name_students[MAX_NUM_OF_STUDENTS];
char choose;
extern int Input_project();
extern int Search_project();
extern int Delete_project();
extern int Modify_project();
int Face()//主界面
{
cout<<"***********欢迎使用学生信息管理系统************"<<endl<<endl;
cout<<"◇ 录入(I),"<<endl<<"◇ 查询(S),"<<endl<<"◇ 删除(D),"<<endl
<<"◇ 修改(M),"<<endl<<"◇ 退出(E),"<<endl;
cout<<"☆ 请输入您的选择(I,S,D,E):";
cin>>choose;
switch(choose)
{ case 'I':
case 'i': system("cls");Input_project();break;
case 'S':
case 's': system("cls");Search_project();break;
case 'D':
case 'd': system("cls");Delete_project();break;
case 'M':
case 'm': system("cls");Modify_project();break;
case 'E':
case 'e': system("cls");return -1;break;
default: cout<<" 输入错误!"<<endl;
}
return 0;
}
int Input_project()//输入功能
{
choose='C';
while( choose=='C'||choose=='c')
{
num++;
cout<<"请输入学号:";
cin>>students[num].no;
cout<<"请输入姓名:";
cin>>students[num].name;
cout<<"请输入年龄:";
cin>>students[num].age;
cout<<"请输入性别:";
cin>>students[num].sex;
cout<<"请输入出生年月:";
cin>>students[num].bonetime;
cout<<"请输入地址:";
cin>>students[num].address;
cout<<"请输入电话号码:";
cin>>students[num].phone;
cout<<"请输入E-mail:";
cin>>students[num].mail;
cout<<"☆ 继续或返回主菜单(C/E):";
cin>>choose;
if(choose=='E'||choose=='e') break;
}
num+=1;
int i=num;//以下是按no冒泡排序
bool exchange;
while(i>1)
{ exchange=false;
for( int k=0;k<i-1;k++)
{ if(students[k].no>students[k+1].no)
{ Student temp=students[k];
students[k]=students[k+1];
students[k+1]=temp;
exchange=true;
}
}
if (!exchange) break;
i--;
}
for (int t=0;t<num;t++)//结构体数组各项一一复制
{ name_students[t].no=students[t].no;
*strcpy(name_students[t].name,students[t].name);
name_students[t].age=students[t].age;
*strcpy(name_students[t].sex,students[t].sex);
*strcpy(name_students[t].bonetime,students[t].bonetime);
*strcpy(name_students[t].address,students[t].address);
name_students[t].phone=students[t].phone;
*strcpy(name_students[t].mail,students[t].mail);
}
while(i>1)//以下是按name冒泡排序
{ exchange=false;
for( int k=0;k<i-1;k++)
{ if(strcmp(name_students[k].name,name_students[k+1].name)>0)
{ Student temp=name_students[k];
name_students[k]=name_students[k+1];
name_students[k+1]=temp;
exchange=true;
}
}
if (!exchange) break;
i--;
}
FILE *fp=fopen("c:\\name.txt","a+");//存储两结构体数组
FILE *fp1=fopen("c:\\number.txt","a+");
if (fp == NULL||fp1 == NULL)//判断文件打开是否成功
{
cout<<"打开文件失败!"<<endl;
return -1;
}
for(i=0;i<num;i++)
{
fwrite(&students[i],sizeof(Student),1,fp);
fwrite(&name_students[i],sizeof(Student),1,fp1);
}
fclose(fp);
fclose(fp1);
system("cls");return 0;
}
int Search_project()//查询功能
{
FILE *fp=fopen("c:\\name.txt","r");
FILE *fp1=fopen("c:\\number.txt","r");
if (fp == NULL||fp1 == NULL)//判断文件打开是否成功
{
cout<<"打开文件失败!"<<endl;
return -1;
}
num=0;
fread(&students[num],sizeof(Student),1,fp);
fread(&name_students[num],sizeof(Student),1,fp1);
while((!feof(fp))&&(!feof(fp1)))
{
num++;//计算已存储的资料的人数num
fread(&students[num],sizeof(Student),1,fp);
fread(&name_students[num],sizeof(Student),1,fp1);
}
fclose(fp);
fclose(fp1);
cout<<'\t'<<"按学号查询(A)"<<'\t'<<"按姓名查询(B)"<<'\t'<<"返回主菜单(E)"<<endl;
cout<<"Ο 请选择:";
char input;
cin>>input;
switch(input)
{
case 'A':
case 'a':
{
cout<<"请输入学号:";
int number;
cin>>number;//以下是折半查询:
int low=0;
int high=num-1;
while (low<=high)
{
int mid=(low+high)/2;
if (students[mid].no==number)
{
cout<<" 学号:"<<students[mid].no<<endl;
cout<<" 姓名:"<<students[mid].name<<endl;
cout<<" 年龄: "<<students[mid].age<<endl;
cout<<" 性别: "<<students[mid].sex<<endl;
cout<<"出生年月: "<<students[mid].bonetime<<endl;
cout<<" 地址: "<<students[mid].address<<endl;
cout<<"电话号码: "<<students[mid].phone<<endl;
cout<<" E-mail: "<<students[mid].mail<<endl;
break;
}
else if (number>students[mid].no)
low=mid+1;
else high=mid-1;
}
if(low>high) cout<<" 无相关资料!"<<endl;
}
break;
case 'B':
case 'b':
{
cout<<"请输入姓名:";
char name[20];
cin>>name;
int low=0;
int high=num-1;//以下是折半查询:
while (low<=high)
{
int mid=(low+high)/2;
if (strcmp(name_students[mid].name,name)==0)
{
cout<<" 学号:"<<name_students[mid].no<<endl;
cout<<" 姓名:"<<name_students[mid].name<<endl;
cout<<" 年龄: "<<name_students[mid].age<<endl;
cout<<" 性别: "<<name_students[mid].sex<<endl;
cout<<" 出生年月: "<<name_students[mid].bonetime<<endl;
cout<<" 地址: "<<name_students[mid].address<<endl;
cout<<" 电话号码: "<<name_students[mid].phone<<endl;
cout<<" E-mail: "<<name_students[mid].mail<<endl;
break;
}
else if (strcmp(name_students[mid].name,name)<0)
low=mid+1;
else high=mid-1;
}
if(low>high) cout<<" 无相关资料!"<<endl;
}
break;
case 'E':
case 'e':
system("cls");
return -1;break;
}
cout<<"☆ 继续或返回主菜单(C/E):";
cin>>choose;
if(choose=='C'||choose=='c')
{
system("cls");
Search_project();
}
else
{
system("cls");
return -1;
}
return 0;
};
int Delete_project()
{
cout<<'\t'<<"按学号删除(A)"<<'\t'<<"按姓名删除(B)"<<'\t'<<"返回主菜单(E)"<<endl;
cout<<" 请选择:";
char input;
cin>>input;
switch(input)
{
case 'A':
case 'a':
cout<<" 需删除的学生的学号是:";
int number;
cin>>number;
for(int i=0;i<num;i++)
{
if( students[i].no==number)
break;
}
for(int j=i;j<num;j++)//将要删除的学生调至数组最后一位,前num-1位仍按no排列
{
Student temp =students[j];
students[j]=students[j+1];
students[j+1]=temp;
}
case 'B':
case 'b':
cout<<" 需删除的学生的姓名是:";
char name[20];
cin>>name;
for(int t=0;t<num;t++)
{
if(strcmp(name_students[t].name,name)==0)
break;
}
for(int j=t;j<num;j++)//将要删除的学生调至数组最后一位,前num-1位仍按name排列
{
Student temp =name_students[j];
name_students[j]=name_students[j+1];
name_students[j+1]=temp;
}
num-=1;//总人数减一,即删除最后一位
FILE *fp=fopen("c:\\name.txt","w");
FILE *fp1=fopen("c:\\number.txt","w");
if (fp == NULL||fp1 == NULL)//判断文件打开是否成功
{
cout<<"打开文件失败!"<<endl;
return -1;
}
for(i=0;i<num;i++)
{
fwrite(&students[i],sizeof(Student),1,fp);
fwrite(&name_students[i],sizeof(Student),1,fp1);
}
fclose(fp);
fclose(fp1);
bool p=true;//以下查找并判断删除是否成功
int low=0;
int high=num-1;
while (low<=high)
{
int mid=(low+high)/2;
if (students[mid].no==number||name_students[mid].no==number)
{
cout<<" 删除失败!"<<endl;
p=false;
break;
}
else if (number>students[mid].no)
low=mid+1;
else high=mid-1;
}
if(p)
cout<<" 删除成功!"<<endl;
cout<<"☆ 继续或返回主菜单(C/E):";
cin>>choose;
if(choose=='C'||choose=='c')
{
system("cls");Delete_project();
}
else
{
system("cls");return -1;
}
return 0;
};
int Modify_project()
{
FILE *fp=fopen("c:\\name.txt","r");
FILE *fp1=fopen("c:\\number.txt","r");
if (fp == NULL||fp1 == NULL)//判断文件打开是否成功
{
cout<<"打开文件失败!"<<endl;
return -1;
}
num=0;
fread(&students[num],sizeof(Student),1,fp);
fread(&name_students[num],sizeof(Student),1,fp1);
while((!feof(fp))&&(!feof(fp1)))
{
num++;//计算已存储的资料的人数num
fread(&students[num],sizeof(Student),1,fp);
fread(&name_students[num],sizeof(Student),1,fp1);
}
fclose(fp);
fclose(fp1);
cout<<" 需修改的学生的学号是:";
int number;
cin>>number;
int t,math,english,physics,computer;
cout<<" 输入修改结果:"<<endl;
cout<<" 姓名:";
cin>>name;
cout<<" 年龄:";
cin>>age;
cout<<" 性别:";
cin>>sex;
cout<<" 出生年月:";
cin>>bonetime;
cout<<" 地址:";
cin>>address;
cout<<" 电话号码:";
cin>>phone;
cout<<" E-mail:";
cin>>mail;
for(int i=0;i<num;i++)
{
if( students[i].no==number)
break;
}
students[i].name=name;
students[i].age=age;
students[i].sex=sex;
students[i].bonetime=bonetime;
students[i].address=address;
students[i].phone=phone;
students[i].mail=mail;
i=num;//以下是按no冒泡排序
bool exchange;
while(i>1)
{
exchange=false;
for( int k=0;k<i-1;k++)
{
if(students[k].no>students[k+1].no)
{
Student temp=students[k];
students[k]=students[k+1];
students[k+1]=temp;
exchange=true;
}
}
if (!exchange) break;
i--;
}
for (t=0;t<num;t++)//结构体数组各项一一复制
{
name_students[t].no=students[t].no;
*strcpy(name_students[t].name,students[t].name);
name_students[t].age=students[t].age;
name_students[t].sex=students[t].sex;
name_students[t].bonetime=students[t].bonetime;
name_students[t].address=students[t].address;
name_students[t].phone=students[t].phone;
name_students[t].mail=students[t].mail;
}
while(i>1)//以下是按name冒泡排序
{
exchange=false;
for( int k=0;k<i-1;k++)
{
if(strcmp(name_students[k].name,name_students[k+1].name)>0)
{
Student temp=name_students[k];
name_students[k]=name_students[k+1];
name_students[k+1]=temp;
exchange=true;
}
}
if (!exchange) break;
i--;
}
fp=fopen("c:\\name.txt","w+");//存储两结构体数组,w+表示清空已有文件的内容
fp1=fopen("c:\\number.txt","w+");
if (fp == NULL||fp1 == NULL)//判断文件打开是否成功
{
cout<<"打开文件失败!"<<endl;
return -1;
}
for(i=0;i<num;i++)
{
fwrite(&students[i],sizeof(Student),1,fp);
fwrite(&name_students[i],sizeof(Student),1,fp1);
}
fclose(fp);
fclose(fp1);
cout<<"☆ 继续或返回主菜单(C/E):";
cin>>choose;
if(choose=='C'||choose=='c')
{
system("cls");Delete_project();}
else {system("cls");return -1;}
return 0;
};
int main()
{
system("cls");
do
{Face();}
while (choose=='e'||choose=='E');
return 0;
system("pause");
}
⑤ 学生信息管理系统C
#include <stdio.h>
#include <malloc.h>
#include <string.h>
#include <io.h>
#define NULL 0
#define LEN sizeof(struct student)
#define FILE_DATA_PATH "c:\student.txt"
struct student
{
long int num;
char name[20];
int age;
char sex[4];
char birthday[10];
char address[30];
long int tele_num;
char E_mail[20];
struct student *next;
};
int TOTAL_NUM = 0;
struct student *head = NULL;
void welcome();
void mainmenu();
void record();
void insert(struct student *stu);
void display(struct student *stu);
void displayAll();
void query();
void query_by_num();
void query_by_name();
void readData();
void writeData();
void freeAll();
void del();
void change();
void devise(struct student *p);
int main()
{
char userName[9];
char userPWD[7];
int i;
welcome();
for(i = 0; i < 3; i++)
{
printf("\n管理员初始用户名和密码均为admin\n");
printf("请输入您的用户名:");
scanf("%s", userName);
printf("\n请输入您的密码:");
scanf("%s", userPWD);
if ((strcmp(userName,"admin")==0) && (strcmp(userPWD,"admin")==0))
{
//用户名和密码正确,显示主菜单
mainmenu();
break;
}
else
{
if (i < 2)
{
//用户名或密码错误,提示用户重新输入
printf("用户名或密码错误,请重新输入!");
}
else
{
//连续3次输错用户名或密码,退出系统。
printf("您已连续3次将用户名或密码输错,系统将退出!");
}
}
}
return 0;
}
//显示欢迎信息
void welcome()
{
printf("+---------------------------+\n");
printf("| |\n");
printf("| 欢迎使用学生信息管理系统 |\n");
printf("| |\n");
printf("+---------------------------+\n");
}
//系统主菜单
void mainmenu()
{
int choice;
choice = -1;
readData();
printf("\n温馨提示:为保证您的操作得到保存,请按正常顺序退出系统^_^\n");
do
{
printf("\n\n\n");
printf("\t\t\t--------------------------------\n");
printf("\t\t\t+ 学生信息管理系统 |\n");
printf("\t\t\t--------------------------------\n");
printf("\t\t\t+ [1]----录入学生信息 |\n");
printf("\t\t\t+ [2]----浏览学生信息 |\n");
printf("\t\t\t+ [3]----查询学生信息 |\n");
printf("\t\t\t+ [4]----删除学生信息 |\n");
printf("\t\t\t+ [5]----修改学生信息 |\n");
printf("\t\t\t+ [0]----退出系统 |\n");
printf("\t\t\t+*·*·*·*·*·*·*·*·*·*·|\n");
printf("\t\t\t--------------------------------\n");
printf("请输入您的选择:");
scanf("%d", &choice);
switch(choice)
{
case 0:
writeData();
freeAll();
exit(0);
case 1:
record();
break;
case 2:
displayAll();
break;
case 3:
query();
break;
case 4:
del();
break;
case 5:
change();
break;
default:
printf("\n无效选项!");
break;
}
}
while(choice != 0);
}
//录入学生信息
void record()
{
struct student *p0;
p0 = (struct student *)malloc(LEN);
printf("请输入学生的学号:");
scanf("%ld",&p0->num);
printf("请输入学生的姓名:");
scanf("%s",p0->name);
printf("请输入学生的年龄:");
scanf("%d",&p0->age);
printf("请输入学生的性别:");
scanf("%s",p0->sex);
printf("请输入学生的出生年月:");
scanf("%s",p0->birthday);
printf("请输入学生的地址:");
scanf("%s",p0->address);
printf("请输入学生的电话:");
scanf("%ld",&p0->tele_num);
printf("请输入学生的E-mail:");
scanf("%s",p0->E_mail);
insert(p0);
printf("该学生的信息为:\n");
printf("-------------------------------------------------------------------------------");
printf("学号\t姓名\t年龄\t性别\t出生年月\t\t地址\t电话\tE-mail\n");
display(p0);
}
void insert(struct student *stu)
{
struct student *p0, *p1, *p2;
p1 = head;
p0 = stu;
if(head == NULL)
{
head = p0;
p0->next = NULL;
}
else
{
while((p0->num > p1->num)&&(p1->next != NULL))
{
p2 = p1;
p1 = p1->next;
}
if(p0->num <= p1->num)
{
if(head == p1)
head = p0;
else
p2->next = p0;
p0->next = p1;
}
else
{
p1->next = p0;
p0->next = NULL;
}
}
TOTAL_NUM++;
}
void display(struct student *p)
{
printf("%ld\t%s\t%d\t%s\t%s\t%s\t%ld\t%s\n", p->num, p->name, p->age, p->sex, p->birthday, p->address, p->tele_num, p->E_mail);
}
//浏览学生信息
void displayAll()
{
struct student *p;
printf("学生总数:%d\n", TOTAL_NUM);
p = head;
if(head != NULL)
{
printf("\n学号\t姓名\t年龄\t性别\t出生年月\t地址\t电话\tE-mail\n");
printf("-------------------------------------------------------------------------------");
do
{
display(p);
p = p->next;
}
while(p != NULL);
}
printf("\n");
}
//查询学生信息
void query()
{
int choice;
choice = -1;
do
{
printf("\n");
printf("+--------------------+\n");
printf("| 按学号查询 请按 1 |\n");
printf("| 按姓名查询 请按 2 |\n");
printf("| 取消 请按 0 |\n");
printf("+--------------------+\n");
printf("请输入您的选择:");
scanf("%d", &choice);
switch(choice)
{
case 0:
return;
case 1:
query_by_num();
break;
case 2:
query_by_name();
break;
default:
printf("\n无效选项!");
break;
}
}
while(choice != 0);
}
//按学号查询学生信息
void query_by_num()
{
int num;
struct student *p1;
printf("请输入学生的学号:");
scanf("%ld", &num);
if(head==NULL)
{
printf("无学生记录!\n");
return;
}
p1=head;
while(num!=p1->num && p1->next!=NULL)
p1=p1->next;
if(num == p1->num)
{
printf("\n学号\t姓名\t年龄\t性别\t出生年月\t地址\t电话\tE-mail\n");
printf("-------------------------------------------------------------------------------");
display(p1);
}
else
printf("没有该学生记录,请核对!");
}
//按姓名查询学生信息
void query_by_name()
{
char name[20];
struct student *p1;
printf("请输入学生的姓名:");
scanf("%s", name);
if(head==NULL)
{
printf("无学生记录!\n");
return;
}
p1=head;
while(strcmp(name, p1->name) && p1->next!=NULL)
p1=p1->next;
if(!strcmp(name, p1->name))
{
printf("\n学号\t姓名\t年龄\t性别\t出生年月\t地址\t电话\tE-mail\n");
printf("-------------------------------------------------------------------------------");
display(p1);
}
else
printf("没有该学生记录,请核对!");
}
//写入文件
void writeData()
{
FILE* fp;//文件指针
struct student *p;
fp = fopen(FILE_DATA_PATH, "w");
if (!fp)
{
printf("文件打开错误!");
return;
}
fprintf(fp,"%d\n", TOTAL_NUM);
for(p = head; p!= NULL; p= p->next)
{
fprintf(fp,"%ld\t%s\t%d\t%s\t%s\t%s\t%ld\t%s\n",
p->num, p->name, p->age, p->sex, p->birthday, p->address, p->tele_num, p->E_mail);
}
fclose(fp);
}
void freeAll()
{
struct student *p1, *p2;
p1=p2=head;
while(p1)
{
p2=p1->next;
free(p1);
p1=p2;
}
}
//读取文件
void readData()
{
FILE* fp;//文件指针
struct student *p1, *p2;
fp = fopen(FILE_DATA_PATH, "r");
if (!fp)
{
printf("文件打开错误!");
return 0;
}
fscanf(fp,"%d\n", &TOTAL_NUM);
head = p1 = p2 = (struct student *)malloc(LEN);
fscanf(fp,"%ld\t%s\t%d\t%s\t%s\t%s\t%ld\t%s\n",
&p1->num, p1->name, &p1->age, p1->sex, p1->birthday, p1->address, &p1->tele_num, p1->E_mail);
while(!feof(fp))
{
p1 = (struct student *)malloc(LEN);
fscanf(fp,"%ld\t%s\t%d\t%s\t%s\t%s\t%ld\t%s\n",
&p1->num, p1->name, &p1->age, p1->sex, p1->birthday, p1->address, &p1->tele_num, p1->E_mail);
p2->next = p1;
p2 = p1;
}
p2->next = NULL;
fclose(fp);
}
//删除学生信息
void del()
{
struct student *p1, *p2;
long int num;
if(head == NULL)
{
printf("无学生记录!\n");
return;
}
printf("请输入您要删除的学生的学号:");
scanf("%ld", &num);
p1 = head;
while(num != p1->num && p1->next != NULL)
{
p2 = p1;
p1 = p1->next;
}
if(num == p1->num)
{
if(p1 == head)
head = p1->next;
else p2->next = p1->next;
free(p1);
TOTAL_NUM--;
}
else
printf("没有该学生记录,请核对!\n");
}
//修改学生信息
void change()
{
struct student *p1, *p2;
long int num;
if(head == NULL)
{
printf("无学生记录!\n");
return;
}
printf("请输入您要修改的学生的学号:");
scanf("%ld", &num);
p1 = head;
while(num != p1->num && p1->next != NULL)
{
p2 = p1;
p1 = p1->next;
}
if(num == p1->num)
devise(p1);
else
printf("没有该学生记录,请核对!\n");
}
void devise(struct student *p)
{
int choice;
choice = -1;
do
{
printf("请选择您要修改的学生的信息内容:\n");
printf("+----------------------+\n");
printf("| 姓名 请按 1 |\n");
printf("| 年龄 请按 2 |\n");
printf("| 性别 请按 3 |\n");
printf("| 出生年月 请按 4 |\n");
printf("| 地址 请按 5 |\n");
printf("| 电话 请按 6 |\n");
printf("| E-mail 请按 7 |\n");
printf("| 取消 请按 0 |\n");
printf("+----------------------+\n");
printf("请输入您的选择:");
scanf("%d", &choice);
switch(choice)
{
case 0:
return;
case 1:
printf("请输入新姓名:");
scanf("%s", p->name);
break;
case 2:
printf("请输入新年龄:");
scanf("%d", &p->age);
break;
case 3:
printf("请输入新性别:");
scanf("%s", p->sex);
break;
case 4:
printf("请输入新出生年月:");
scanf("%s", p->birthday);
break;
case 5:
printf("请输入新地址:");
scanf("%s", p->address);
break;
case 6:
printf("请输入新电话:");
scanf("%ld", &p->tele_num);
break;
case 7:
printf("请输入新E-mail:");
scanf("%s", p->E_mail);
break;
default:
printf("\n无效选项!");
break;
}
}
while(choice != 0);
}
⑥ 设计一个学生信息管理系统
#include #include #include #define MAX 1000 /*定义学生成绩信息结构*/ struct stu { char id[8]; char name[8]; double Chinese; double Math; double English; double average; double total; }; /*学生结构数组,用于存储学生成绩信息*/ struct stu students[MAX]; /*当前学生人数*/ int current; void input() { int i; printf("请输入学生人数:"); scanf("%d", & current); for (i = 0; i < current; i++) { printf("\n请输入学生学号,最多为7位数: "); scanf("%s", students[i].id); printf("请输入学生姓名:"); scanf("%s", students[i].name); printf("请输入语文成绩:"); scanf("%lf", &students[i].Chinese); printf("请输入数学成绩:"); scanf("%lf", &students[i].Math); printf("请输入英语成绩:"); scanf("%lf", &students[i].English); students[i].total = students[i].Chinese + students[i].Math + students[i].English; students[i].average = students[i].total / 3; } } /*排名次,即对学生结构数组排序*/ void sort(struct stu array[], int n) { int i, j; struct stu temp; for (i = 0; i < n; i++) { for (j = i+1; j < n; j++) { if (array[i].average - array[j].average < 1e-16) { temp = array[i]; array[i] = array[j]; array[j] = temp; } } } } /*统计平均成绩,并输出各分数段的人数*/ void print_score(struct stu array[], int n) { int i; double ave = 0; int sum1 = 0, sum2 = 0, sum3 = 0, sum4 = 0; for (i = 0; i < n; i++) { ave += array[i].average; switch ((int)(array[i].average / 10)) { case 10: case 9: sum1++; break; case 8: sum2++; break; case 7: case 6: sum3++; break; default: sum4++; } } printf("全班的平均分为:%.1f\n", ave/n); printf("平均分在90分以上的人数为:%d\n", sum1); printf("平均分在80~89的人数为:%d\n", sum2); printf("平均分在60~79的人数为:%d\n", sum3); printf("平均分在60分以下的人数为:%d\n", sum4); } /*输出不及格科目及学生名单*/ void print_unreach(struct stu array[], int n) { int i; printf("科目\t学号\t名字\n"); for (i = 0; i < n; i++) { if (array[i].Chinese < 60) { printf("语文\t%s\t%s\n", array[i].id, array[i].name); } if (array[i].Math < 60) { printf("数学\t%s\t%s\n", array[i].id, array[i].name); } if (array[i].English 60) { printf("英语\t%s\t%s\n", array[i].id, array[i].name); } } } /*打印优等生名单*/ void print_good(struct stu array[], int n) { int i; char mark = 0; if (n > 3) { n = 3; } printf("学号\t姓名\t语文\t数学\t英语\t平均分\t名次\n"); for (i = 0; i n; i++) { if ((array[i].Chinese > 60) && (array[i].Math > 60) && (array[i].English > 60)) { if (array[i].average > 90) mark = 1; else if (array[i].average > 85) { if (array[i].Chinese == 100) mark = 1; if (array[i].Math == 100) mark = 1; if (array[i].English == 100) mark = 1; if (array[i].Chinese > 95 && array[i].English > 95) mark = 1; if (array[i].Chinese > 95 && array[i].Math > 95) mark = 1; if (array[i].Math > 95 && array[i].English > 95) mark = 1; } if (mark == 1) { printf("%s\t%s\t", array[i].id, array[i].name); printf("%.f\t%.f\t%.f\t%.1f\t", array[i].Chinese, array[i].Math, array[i].English, array[i].average); printf("%d\n", i+1); } } } } /*按学生姓名查询成绩*/ void search_name(struct stu array[], int n, char* name) { int i; char mark = 1; for (i = 0; i < n; i++) { if (strcmp(name, array[i].name) == 0) { printf("学生姓名:%s\n", name); printf("学生学号:%s\n", array[i].id); printf("语文:%.f\n", array[i].Chinese); printf("数学:%.f\n", array[i].Math); printf("英语:%.f\n", array[i].English); printf("平均分:%.1f\n", array[i].average); mark = 0; } } if (mark == 1) puts("不存在该学生记录"); } /*按学生学号查询成绩*/ void search_id(struct stu array[], int n, char* id) { int i; char mark = 1; for (i = 0; i < n; i++) { if (strcmp(id, array[i].id) == 0) { printf("学生姓名:%s\n", array[i].name); printf("学生学号:%s\n", array[i].id); printf("语文:%.f\n", array[i].Chinese); printf("数学:%.f\n", array[i].Math); printf("英语:%.f\n", array[i].English); printf("平均分:%.1f\n", array[i].average); mark = 0; break; } } if (mark == 1) puts("不存在该学生记录"); } void print_menu() { system("cls"); printf("1.输入学生信息\n"); puts("2.统计全班学生成绩"); puts("3.按学号查询学生成绩"); puts("4.按姓名查询学生成绩"); puts("5.输出不及格情况"); puts("6.输出优等生名单"); puts("0.退出本程序"); printf("\n\n 请输入你的选择:"); } int main(int argc, char **argv) { char ch = 0; char id[8], name[8]; while (ch != '0') { print_menu(); ch = getchar(); switch (ch) { case '1': { system("cls"); input(); sort(students, current); break; } case '2': { system("cls"); print_score(students, current); break; } case '3': { system("cls"); printf("请输入学号:"); scanf("%s", id); search_id(students, current, id); break; } case '4': { system("cls"); printf("请输入姓名:"); scanf("%s", name); search_name(students, current, name); break; } case '5': { system("cls"); print_unreach(students, current); break; } case '6': { system("cls"); print_good(students, current); break; } case '0': exit(0); } printf("\n\n按任意键返回主菜单……"); getchar(); getchar(); } return 0; }
⑦ 求一个简单学生管理系统
找学C++的人帮你编一个,我又一个类似的。不过我不会搞成系统界面。不过先发给你看看。
定义一个学生类,共中有3个数据成员:学号、姓名、年龄,以及若干成员函数。同时编写main函数使用这个类,实现对学生数据的赋值和输出,并且实现以ASCII码形式将学生的信息存储到一个磁盘文件中。
#include <iostream.h>
#include <math.h>
#include <iomanip.h>
#include <string.h>
#include <stdlib.h>
#include <fstream.h>
struct student
{
int mo,da,yr;
char name[10];
int num;
int age;
static char curr[2][10]; //课程名
float score[2]; //相应课程的分数
};
char student::curr[2][10];
float average(student stu) //求某学生三门课的平均分
{
float sum=0;
for(int i=0;i<2;i++)
sum+=stu.score[i];
return sum/2;
}
float average1(student stu[],int n,int k)//求某门课总平均分,k代表课程的编号
{
float sum=0;
for(int i=0;i<n;i++)
sum+=stu[i].score[k];
return sum/n;
}
void sort(student stu[],int n) //对stu按平均成绩进行排序(降序)
{
student temp;
for(int i=0;i<n-1;i++)
{
for(int j=i+1;j<n;j++)
if(average(stu[i])<average(stu[j]))
{
temp=stu[i];
stu[i]=stu[j];
stu[j]=temp;
}
}
}
void main()
{
ofstream fout; //fout输出文件流对象
ifstream fin;
student stu[50];
int count=0;
char endyn;
cout<<"输入两门课的名称:";
cin>>student::curr[0]>>student::curr[1];
while(1)
{
cout<<"输入第"<<count+1<<"个学生的信息:\n";
cout<<"姓名:";
cin>>stu[count].name;
cout<<"学号:";
cin>>stu[count].num;
cout<<"年龄:";
cin>>stu[count].age;
for(int i=0;i<2;i++)
{
cout<<"课程"<<student::curr[i]<<"的得分为:";
cin>>stu[count].score[i];
}
cout<<"是否继续(Y/N)";
cin>>endyn;
if(endyn=='N'||endyn=='n')
{
cout<<'\n';
break;
}
else
count++;
}
for(int i=0;i<=count;i++)
{
cout<<stu[i].name<<"两门课的平均分为:"<<average(stu[i])<<'\n';
}
for(i=0;i<2;i++)
{
cout<<"\n全班课程"<<student::curr[i]<<"的平均分为:"<<average1(stu,count+1,i);
}
cout<<"\n\n";
sort(stu,count+1);
cout<<" 按平均成绩排名:\n\n";
cout<<setw(8)<<"姓名"<<setw(8)<<"学号"<<setw(8)<<"年龄"<<setw(12)<<student::curr[0]<<setw(12)
<<student::curr[1]<<setw(12)<<"平均成绩\n";
for(i=0;i<=count;i++)
cout<<setw(8)<<stu[i].name<<setw(8)<<stu[i].num<<setw(8)<<stu[i].age<<setw(12)<<stu[i].score[0]
<<setw(12)<<stu[i].score[1]<<setw(12)<<average(stu[i])<<'\n';
while(fout&&i<3)
{
fout.write((char*)&stu[i],sizeof(student));
i++;
}
fout.close();
fin.open("students.txt",ios::in|ios::binary);
if (!fin)
{
cout<<"Error:Can't open students.txt!";
exit(1);
}
fin.close();
}
输入和输出结果:(粗体为输入结果)
输入两门课的名称:gaoshu
wuli
输入第1个学生的信息:
姓名:zhao
学号:2
年龄:21
课程gaoshu的得分为:83
课程wuli的得分为:76
是否继续(Y/N)y
输入第2个学生的信息:
姓名:qian
学号:5
年龄:21
课程gaoshu的得分为:73
课程wuli的得分为:87
是否继续(Y/N)y
输入第3个学生的信息:
姓名:sun
学号:7
年龄:21
课程gaoshu的得分为:82
课程wuli的得分为:79
是否继续(Y/N)y
输入第4个学生的信息:
姓名:zhou
学号:18
年龄:20
课程gaoshu的得分为:82
课程wuli的得分为:84
是否继续(Y/N)n
zhao两门课的平均分为:79.5
qian两门课的平均分为:80
sun两门课的平均分为:80.5
zhou两门课的平均分为:83
全班课程gaoshu的平均分为:80
全班课程wuli的平均分为:81.5
按平均成绩排名:
姓名 学号 年龄 gaoshu wuli 平均成绩
zhou 18 20 82 84 83
sun 7 21 82 79 80.5
qian 5 21 73 87 80
zhao 2 21 83 76 79.5
⑧ 学生管理系统的介绍
学生信息管理系统是针对学校学生处的大量业务处理工作而开发的管理软件,主要用于学校学生信息管理,总体任务是实现学生信息关系的系统化、科学化、规范化和自动化,其主要任务是用计算机对学生各种信息进行日常管理,如查询、修改、增加、删除等,另外还考虑到学生选课,针对这些要求设计了学生信息管理系统。推行学校信息管理系统的应用是进一步推进学生学籍管理规范化、电子化、控制辍学和提高义务教育水平的重要举措。