建材秒知道
登录
建材号 > 设计 > 正文

设计一个学生信息管理系统

激动的老虎
坚强的指甲油
2022-12-31 08:16:51

设计一个学生信息管理系统

最佳答案
勤恳的小懒猪
欣慰的鸭子
2025-08-03 08:43:27

#include #include #include #define MAX 1000 struct stu { char id[8]char name[8]double Chinesedouble Mathdouble Englishdouble averagedouble total} struct stu students[MAX] int currentvoid input() { int iprintf("请输入学生人数:")scanf("%d", &current)for (i = 0i <currenti++) { 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].Englishstudents[i].average = students[i].total / 3} } void sort(struct stu array[], int n) { int i, jstruct stu tempfor (i = 0i <ni++) { for (j = i+1j <nj++) { 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 idouble ave = 0int sum1 = 0, sum2 = 0, sum3 = 0, sum4 = 0for (i = 0i <ni++) { ave += array[i].averageswitch ((int)(array[i].average / 10)) { case 10: case 9: sum1++breakcase 8: sum2++breakcase 7: case 6: sum3++breakdefault: 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 iprintf("科目\t学号\t名字\n")for (i = 0i <ni++) { 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 ichar mark = 0if (n >3) { n = 3} printf("学号\t姓名\t语文\t数学\t英语\t平均分\t名次\n")for (i = 0i ni++) { if ((array[i].Chinese >60) &&(array[i].Math >60) &&(array[i].English >60)) { if (array[i].average >90) mark = 1else if (array[i].average >85) { if (array[i].Chinese == 100) mark = 1if (array[i].Math == 100) mark = 1if (array[i].English == 100) mark = 1if (array[i].Chinese >95 &&array[i].English >95) mark = 1if (array[i].Chinese >95 &&array[i].Math >95) mark = 1if (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 ichar mark = 1for (i = 0i <ni++) { 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 ichar mark = 1for (i = 0i <ni++) { 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 = 0break} } 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 = 0char 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}

最新回答
包容的大白
土豪的羊
2025-08-03 08:43:27

#include<iostream>

#include<string>

#include <fstream>

#include<sstream>

#include<iomanip>

using namespace std

//结点类,用于存放学生的各种数据

class Node{

public:

int id//学号

string name//姓名

string grade//等级

double english//英语

double math//数学

double c//C++

double sum//总分

double average

Node *next//指向下一结点的指针

Node(int nid=0,string nname="noname", //构造函数,初始化变量

double e=0,double m=0,double cl=0,

double s=0 ,double a=0,string g="ng")

}

Node::Node(int nid,string nname,double e,double m,double cl,double s,double a,string g){

id=nid

name=nname

next=NULL

english=e

math=m

c=cl

sum=s

average=a

grade=g

}

//class NOde结束

//Link类,把数据以链表的形式存储,链表的每个结点为一个Node对象

class Link{

private:

Node *head//链表的头指针,为Node对象类型的指

public :

Link()//构造函数,初始化变量

bool linkIsEmpty()//判断链表是否为空

void linkInsert(Node *newnode)//向链表中插入新的结点

bool linkDelete(int nid)//从链表中删除的结点

void linkClear()//清空链表中数据

void linkView()//查看链表中数据

void linkGrade(Node *p1)//计算等级

void linkAverageTotle()//按平均分统计

Node* linkFind(int nid)//在链表中查找id为nid结点,返回指向该结点的指针

Node* getHead()//获取头指针

}

Link::Link(){ //构造函数,初始化链表为空

head=NULL

}

bool Link::linkIsEmpty(){ //判断链表是否为空,空则返回true

return(head==NULL)

}

void Link::linkInsert(Node *newnode){//按id值从小到大的顺序,插入新的结点

Node *p1

if(!head)//链表为空的情况

head=newnode

else if((head->id)>(newnode->id)){//插入到第一个结点的情况

newnode->next=head

head=newnode

}

else{//插入到第二个及以后情况

p1=head

while(1){

if(!(p1->next)){

p1->next=newnode

break

}

else if((p1->next)->id>newnode->id){

newnode->next=p1->next

p1->next=newnode

break

}

p1=p1->next

}

}

}

bool Link::linkDelete(int nid){//删除结点,成功则返回true

Node *p

if(head==NULL)//链表为空的情况

return false

if(head->id==nid){//删除的为第一个结点的情况

head=head->next

return true

}

p=head

while(p->next){//删除的为第二个及以后结点的情况

if((p->next)->id==nid){

p->next=(p->next)->next

return true

}

p=p->next

}

return false

}

void Link::linkClear(){//清空链表

head=NULL

}

void Link::linkView(){//显示链表数据

Node *p=head

cout<<setw(10)<<"学号"<<setw(8)<<"姓名"<<setw(8)<<"英语"<<setw(8)

<<"数学"<<setw(8)<<"C++"<<setw(8)<<"总分"<<setw(8)<<"平均分"<<setw(8)<<"等级"<<endl

while(p){

(p->sum)=(p->english)+(p->math)+(p->c)//计算总分

(p->average)=((p->english)+(p->math)+(p->c))/3//计算平均成绩

linkGrade(p)//计算等级

cout<<setw(10)<<p->id<<setw(8)<<p->name<<setw(8)<<p->english

<<setw(8)<<p->math<<setw(8)<<p->c<<setw(8)<<p->sum<<setw(8)

<<p->average<<setw(8)<<p->grade<<endl

p=p->next

}

}

void Link::linkGrade(Node *p1){ // 计算等级

while(p1){

if(p1->average>=90&&p1->average<=100)

p1->grade="优"

else if(p1->average>=80&&p1->average<90)

p1->grade="良好"

else if(p1->average>=70&&p1->average<80)

p1->grade="中等"

else if(p1->average>=60&&p1->average<=70)

p1->grade="合格"

else

p1->grade="不合格"

p1=p1->next

}

}

void Link::linkAverageTotle(){//按学生平均分统计

int a=0,b=0,c=0,d=0,e=0,f=0

double averagesum=0,asum=0,aaverage=0,paverage=0

Node *p3=head

while(p3){

if(p3->average>=90&&p3->average<=100)

a+=1

else if(p3->average>=80&&p3->average<90)

b+=1

else if(p3->average>=70&&p3->average<80)

c+=1

else if(p3->average>=60&&p3->average<70)

d+=1

else

e+=1

asum+=p3->sum

aaverage+=p3->average

p3=p3->next

}

f=a+b+c+d+e

averagesum=asum/f

paverage=aaverage/f

cout<<"|-------------------------------------------------------|"<<endl

cout<<"| 总 人 数:"<<f<<endl

cout<<"|-------------------------------------------------------|"<<endl

cout<<"| 优 人 数:"<<a<<" | "<<"优 秀 率: "<<a*100/f<<"%"<<endl

cout<<"|-------------------------------------------------------|"<<endl

cout<<"| 良 好 的人数:"<<b<<" | "<<"良 好 率: "<<b*100/f<<"%"<<endl

cout<<"|-------------------------------------------------------|"<<endl

cout<<"| 中 等 的人数:"<<c<<" | "<<"中 等 率: "<<c*100/f<<"%"<<endl

cout<<"|-------------------------------------------------------|"<<endl

cout<<"| 所有合格人数:"<<a+b+c+d<<" | "<<"合 格 率: "<<(a+b+c+d)*100/f<<"%"<<endl

cout<<"|-------------------------------------------------------|"<<endl

cout<<"| 不 合 格 数:"<<e<<" | "<<"不合格率: "<<e*100/f<<"%"<<endl

cout<<"|-------------------------------------------------------|"<<endl

cout<<"| 总分的平均分:"<<averagesum<<" | "<<"所有科目的平均分:"<<paverage<<endl

cout<<"|-------------------------------------------------------|"<<endl

}

Node* Link::linkFind(int nid){//查找id值为nid的结点,返回该结点的指针

Node *p=head//没找到符合条件的结点的话,返回的指针值为NULL

while(p){

if(p->id==nid)

break

else

p=p->next

}

return p

}

Node* Link::getHead(){

return head

}

//class Link 结束

//类Student,用于包装Link类及菜单操作

class Student{

private:

Link slink//Link对象成员

bool k//记录数据是否被修改

public:

Student()

void studentClear()

void studentInsert()

void studentDelete()

void studentFind()

void studentView()

void studentLoad()

void studentSave()

void studentAverageTotle()//按平均分数统计等级

void Exit()//退出程序

void showMenu()//显示菜单

void showTip()//显示操作提示

void doMenu(char n)//执行相应菜单项功能

}

Student::Student(){

Link()//调用成员对象的构造函数

studentLoad()//从文件中读取数据,创建链表

k=false//设置数据被修改

}

void Student::studentClear(){//清空学生记录

slink.linkClear()

cout<<"成功清空学生记录!"<<endl

}

void Student::studentInsert(){//插入学生记录

Node *p=new Node()

cout<<"请输入学号:"

cin>>p->id

cout<<"请输入姓名:"

cin>>p->name

if(!slink.linkFind(p->id)){//判断学号是否存在

slink.linkInsert(p)

k=true

}

else

cout<<"学号为"<<p->id<<"的学生已存在,插入失败!"<<endl

cout<<"请输入成绩:"<<endl

cout<<"英语:"

cin>>p->english

cout<<endl

cout<<"数学:"

cin>>p->math

cout<<endl

cout<<"C++:"

cin>>p->c

cout<<endl

(p->sum)=(p->english)+(p->math)+(p->c)//计算总分

(p->average)=((p->english)+(p->math)+(p->c))/3//计算平均成绩

}

void Student::studentDelete(){//删除学生记录

int i

if(slink.linkIsEmpty())//链表为空的情况

cout<<"没有学生记录!"<<endl

else{

cout<<"请输入学号:"

cin>>i

if(slink.linkDelete(i)){

cout<<"成功删除学号为"<<i<<"的学生记录!"<<endl

k=true

}

else

cout<<"没有找到学号为"<<i<<"的学生!"<<endl

}

}

void Student::studentFind(){//查找某学号的学生记录

int n

Node *p

if(slink.linkIsEmpty())//链表为空的情况

cout<<"没有学生记录!"<<endl

else{

cout<<"请输入要查找的学号:"

cin>>n

p=slink.linkFind(n)//获得找到的结点的指针

if(p){//指针值不为NULL时

(p->sum)=(p->english)+(p->math)+(p->c)//计算总分

(p->average)=((p->english)+(p->math)+(p->c))/3//计算平均成绩

slink.linkGrade(p)

cout<<setw(6)<<"学号"<<setw(8)<<"姓名"<<setw(8)<<"英语"

<<setw(8)<<"数学"<<setw(8)<<"C++"<<setw(8)<<"总分"<<setw(8)

<<"平均分"<<setw(8)<<"等级"<<endl

cout<<setw(6)<<p->id<<setw(8)<<p->name<<setw(8)<<p->english

<<setw(8)<<p->math<<setw(8)<<p->c<<setw(8)<<p->sum<<setw(8)<<p->average

<<setw(8)<<p->grade<<endl

}

else//指针值为NULL时

cout<<"没有找到学号为"<<n<<"的学生记录!"<<endl

}

}

void Student::studentView(){//显示所有学生的记录

if(slink.linkIsEmpty())

cout<<"没有学生记录!"<<endl

else

slink.linkView()

}

void Student::studentLoad(){//从文件中读入数据,创建链表

Node *p

int nid

ifstream infile("data.txt")

if(!infile)

cerr<<"错误:数据文件不能打开!\n"

else

while(infile>>nid){//读取学号,直到读空

p=new Node()

p->id=nid

infile>>p->name>>p->english>>p->math>>p->c>>p->sum>>p->average>>p->grade//读取姓名

slink.linkInsert(p)

}

infile.close()//关闭文件

}

void Student::studentSave(){//将数据保存到文件

Node *p=slink.getHead()

ofstream outfile("data.txt")

if(!outfile)

cerr<<"错误:数据文件不能打开!\n"

else{

while(p){

outfile<<p->id<<' '<<p->name<<' '<<p->english<<' '<<p->math<<' '

<<p->c<<' '<<p->sum<<' '<<p->average<<' '<<p->grade<<endl

p=p->next

}

k=false

cout<<"保存成功!"<<endl

}

}

void Student::studentAverageTotle(){

if(slink.linkIsEmpty())

cout<<"没有学生记录!"<<endl

else

slink.linkAverageTotle()

}

void Student::Exit(){

char s='Y'

if(k){//判断数据是否修改

cout<<"数据已经改变,是否保存?(y/n):"

cin>>s

if(s=='y'||s=='Y')

studentSave()

}

cout<<"已安全退出,"

system("pause")

exit(0)

}

void Student::showMenu(){

cout<<" "<<"|------------------------------------------------|"<<endl

cout<<" "<<"| 学生信息管理系统 |"<<endl

cout<<" "<<"|------------------------------------------------|"<<endl

cout<<" "<<"| 1. 清空:清除所有学生数据 |"<<endl

cout<<" "<<"|------------------------------------------------|"<<endl

cout<<" "<<"| 2. 添加:插入一条学生数据 |"<<endl

cout<<" "<<"|------------------------------------------------|"<<endl

cout<<" "<<"| 3. 删除:删除指定学生数据 |"<<endl

cout<<" "<<"|------------------------------------------------|"<<endl

cout<<" "<<"| 4. 查找:查找指定学生数据 |"<<endl

cout<<" "<<"|------------------------------------------------|"<<endl

cout<<" "<<"| 5. 显示:显示所有学生数据 |"<<endl

cout<<" "<<"|------------------------------------------------|"<<endl

cout<<" "<<"| 6. 保存:保存所有学生数据 |"<<endl

cout<<" "<<"|------------------------------------------------|"<<endl

cout<<" "<<"| 7. 统计:按学生平均分统计 |"<<endl

cout<<" "<<"|------------------------------------------------|"<<endl

cout<<" "<<"| 0. 退出:安全的退出本系统 |"<<endl

cout<<" "<<"|------------------------------------------------|"<<endl<<endl

}

void Student::showTip(){

cout<<endl

cout<<"-------------------操作完成---------------------"<<endl

cout<<"-----------------选择0-7继续-------------------"<<endl

cout<<"请选择:"

}

void Student::doMenu(char n){

switch(n){

case '1':

studentClear()break

case '2':

studentInsert()break

case '4':

studentFind()break

case '3':

studentDelete()break

case '5':

studentView()break

case '6':

studentSave()break

case '7':

studentAverageTotle()break

case '0':

Exit()break

default:cout<<"输入错误!"

}

}

int main(){

Student s

char i='9'

s.showMenu()

cout<<"选择对应数字进行操作:"

while(1){

cin>>i

system("cls")//清除屏幕

s.showMenu()

s.doMenu(i)

s.showTip()

}

}

直率的宝贝
凶狠的镜子
2025-08-03 08:43:27
#include <time.h>//这个也可以

#include<stdio.h>

#include<conio.h>

#include <stdlib.h>

#include<string.h>

#define MAX 80

void input()

void sort()

void display()

void insert()

void del()

void average()

void find()

void save()

void read()

void del_file()

void average()

void modify()

int now_no=0

struct student

{

int no

char name[20]

char sex[4]

float score1

float score2

float score3

float sort

float ave

float sum

}

struct student stu[MAX],*p

main()

{

int as

start: printf("\n\t\t\t欢迎使用学生成绩管理系统\n")

do

{

printf("\n\t\t\t\t1.录入学员信息\n\t\t\t\t2.显示学员信息\n\t\t\t\t3.成绩排序信息\n\t\t\t\t4.添加学员信息\n\t\t\t\t5.删除学员信息\n\t\t\t\t6.修改学员信息\n\t\t\t\t7.查询学员信息\n\t\t\t\t8.从文件读入学员信息\n\t\t\t\t9.删除文件中学员信息\n\t\t\t\t10.保存学员信息\n\t\t\t\t11.退出\n")

printf("\t\t\t\t选择功能选项:")

fflush(stdin)

scanf("%d",&as)

switch(as)

{

case 1:system("cls")input()break

case 2:system("cls")display()break

case 3:system("cls")sort()break

case 4:system("cls")insert()break

case 5:system("cls")del()break

case 6:system("cls")modify()break

case 7:system("cls")find()break

case 8:system("cls")read()break

case 9:system("cls")del_file()break

case 10:system("cls")save()break

case 11:system("exit")exit(0)

default:system("cls")goto start

}

}while(1)

}

void input()

{

int i=0

char ch

do

{

printf("\t\t\t\t1.录入学员信息\n输入第%d个学员的信息\n",i+1)

printf("\n输入学生编号:")

scanf("%d",&stu[i].no)

fflush(stdin)

printf("\n输入学员姓名:")

fflush(stdin)

gets(stu[i].name)

printf("\n输入学员性别:")

fflush(stdin)

gets(stu[i].sex)

printf("\n输入学员成绩1:")

fflush(stdin)

scanf("%f",&stu[i].score1)

printf("\n输入学员成绩2:")

fflush(stdin)

scanf("%f",&stu[i].score2)

printf("\n输入学员成绩3:")

fflush(stdin)

scanf("%f",&stu[i].score3)

printf("\n\n")

i++

now_no=i

printf("是否继续输入?(Y/N)")

fflush(stdin)

ch=getch()

system("cls")

}

while(ch!='n'&&ch!='N')

system("cls")

}

void sort()

{

struct student temp

int i,j

average()

for(i=1i<now_noi++)

{

for(j=1j<=now_no-ij++)

{

if(stu[j-1].ave<stu[j].ave)

{

temp=stu[j]

stu[j]=stu[j-1]

stu[j-1]=temp

}

}

}

}

void display()

{

int i

char as

average()

do

{

printf("\t\t\t班级学员信息列表\n")

printf("\t编号\t姓名\t性别\t成绩1\t成绩2\t成绩3\t平均值\n")

for(i=0i<now_no&&stu[i].name[0]i++)printf("\t%d\t%s\t%s\t%.2f\t%.2f\t%.2f\t%.2f\n",stu[i].no,stu[i].name,stu[i].sex,stu[i].score1,stu[i].score2,stu[i].score3,stu[i].ave)

printf("\t\t按任意键返回主菜单.")

fflush(stdin)

as=getch()

}

while(!as)

system("cls")

}

void insert()

{

char ch

do

{

printf("\n\t\t输入新插入学员队信息\n")

printf("\n输入学生编号:")

scanf("%d",&stu[now_no].no)

fflush(stdin)

printf("\n输入学员姓名:")

fflush(stdin)

gets(stu[now_no].name)

printf("\n输入学员性别:")

fflush(stdin)

gets(stu[now_no].sex)

printf("\n输入学员成绩1:")

fflush(stdin)

scanf("%f",&stu[now_no].score1)

printf("\n输入学员成绩2:")

fflush(stdin)

scanf("%f",&stu[now_no].score2)

printf("\n输入学员成绩3:")

fflush(stdin)

scanf("%f",&stu[now_no].score3)

printf("\n\n")

now_no=now_no+1

sort()

printf("是否继续输入?(Y/N)")

fflush(stdin)

ch=getch()

system("cls")

}

while(ch!='n'&&ch!='N')

}

void del()

{

int inum,i,j

printf("输入要删除学员的编号:")

fflush(stdin)

scanf("%d",&inum)

for(i=0i<now_noi++)

{

if(stu[i].no==inum)

{

if(i==now_no)now_no-=1

else

{

stu[i]=stu[now_no-1]

now_no-=1

}

sort()

break

}

}

system("cls")

}

void save()

{

FILE *fp

int i

char filepath[20]

printf("输入要保存的文件路径:")

fflush(stdin)

gets(filepath)

if((fp=fopen(filepath,"w"))==NULL)

{

printf("\n保存失败!")

exit(0)

}

for(i=0i<now_noi++)

{

stu[i].sum=stu[i].score1+stu[i].score2+stu[i].score3

stu[i].ave=stu[i].sum/3

fprintf(fp,"\t%d\t%s\t%s\t%.2f\t%.2f\t%.2f\t%.2f\n",stu[i].no,stu[i].name,stu[i].sex,stu[i].score1,stu[i].score2,stu[i].score3,stu[i].ave)

}

fclose(fp)

printf("学生信息已保存在%s中!\n",filepath)

system("pause")

system("cls")

}

void find()

{

int i

char str[20],as

do

{

printf("输入要查询的学生姓名:")

fflush(stdin)

gets(str)

for(i=0i<now_noi++)

if(!strcmp(stu[i].name,str))

{

printf("\t编号\t姓名\t性别\t成绩1\t成绩2\t成绩3\t平均值\n")

printf("\t%d\t%s\t%s\t%.2f\t%.2f\t%.2f\t%.2f\n",stu[i].no,stu[i].name,stu[i].sex,stu[i].score1,stu[i].score2,stu[i].score3,stu[i].ave)

}

printf("\t\t按任意键返回主菜单.")

fflush(stdin)

as=getch()

}

while(!as)

system("cls")

}

void average()

{

int i

for(i=0i<now_noi++)

{

stu[i].sum=stu[i].score1+stu[i].score2+stu[i].score3

stu[i].ave=stu[i].sum/3

}

}

void modify()

{

int i

char str[20],as

printf("输入要修改的学生姓名:")

fflush(stdin)

gets(str)

for(i=0i<now_noi++)

if(!strcmp(stu[i].name,str))

{

system("cls")

printf("\n\t\t输入新插入学员队信息\n")

printf("\n输入学生编号:")

fflush(stdin)

scanf("%d",&stu[i].no)

printf("\n输入学员性别:")

fflush(stdin)

gets(stu[i].sex)

printf("\n输入学员成绩1:")

fflush(stdin)

scanf("%f",&stu[i].score1)

printf("\n输入学员成绩2:")

fflush(stdin)

scanf("%f",&stu[i].score2)

printf("\n输入学员成绩3:")

fflush(stdin)

scanf("%f",&stu[i].score3)

printf("\n\n")

sort()

break

}

system("cls")

}void read()

{

FILE *fp

int i

char filepath[20]

printf("输入要读入的文件路径:")

fflush(stdin)

gets(filepath)

if((fp=fopen(filepath,"r"))==NULL)

{

printf("找不到%s文件!\n",filepath)

system("pause")

exit(0)

}

now_no=0

for(i=0i<MAX&&!feof(fp)i++)

{

fscanf(fp,"\t%d\t%s\t%s\t%f\t%f\t%f\t%f\n",&stu[i].no,stu[i].name,stu[i].sex,&stu[i].score1,&stu[i].score2,&stu[i].score3,&stu[i].ave)

now_no++

}

fclose(fp)

printf("保存的在文件%s中的所有信息已经读入!\n",filepath)

system("pause")

system("cls")

}void del_file()

{

FILE *fp

char filepath[20]

printf("输入要删除的文件路径:")

fflush(stdin)

gets(filepath)

fp=fopen(filepath,"w")

fclose(fp)

printf("保存的在文件%s中的所有信息已经删除!\n",filepath)

system("pause")

system("cls")

}

无聊的抽屉
拉长的小猫咪
2025-08-03 08:43:27
//////////////////////////简单的学生管理系统///////////////////

#include<iostream>

#define max 5

using namespace std

struct student//////////定义数组结构体

{

int xuehao //学号

char name[10] //姓名

char sex //性别

int age//年龄

}stu[max]

//////定义数型

char a //全局函数a(操作数)

int i //全局函数i(循环操作数)

//////////函数列表

void display() //屏显函数

void init()//数组结构体初始化函数

void xuanze() //选择操作数函数

void sys(char a) //根据操作数执行函数

void addf()//增加数据的函数

void delf()//删除数据的函数

void inqf()//查询数据的函数

//////////////////////屏显

void display()

{

cout<<"==========Welcome to Student Manager System!=========="<<endl

cout<<endl

cout<<"A: Add new student"<<endl

cout<<"D: Delete a student"<<endl

cout<<"I: Inquiry a student"<<endl

cout<<"Q: Quit"<<endl

cout<<endl

xuanze()

}

/////////////////////////////信息初始化

void init()

{

for(i=0i<maxi++)

{

stu[i].name[10]='\0'

stu[i].sex='\0'//初始化所有的sex为'\0'

stu[i].age=0

}

}

////////////////////////操作选择

void xuanze()

{

cout<<"input your choose:"<<endl

cin>>a

if(a=='A'||a=='D'||a=='I'||a=='Q')

sys(a) //选择相应的操作数执行函数

else

{

cout<<"Error chooseing!"<<endl

cout<<endl

display()

}

}

/////////////////////相应操作数对应函数

void sys(char a)

{

switch(a)

{

case 'A':addf()

case 'D':delf()

case 'I':inqf()

case 'Q':exit(0) //退出

}

}

/////////////添加数据的函数

void addf()

{

int k=0,j,g

for(i=0i<maxi++)

{

if(stu[i].sex=='\0')k++

}

cout<<"剩余 "<<k<<" 个记录可以添加!"<<endl //输出剩余的可添加记录数目

if(k!=0)

{

cout<<"请输入你要添加的记录的个数,但是记录个数不能超过 "<<k<<endl

cin>>j

if(j>k)

{

cout<<"Error number!"<<endl

cout<<endl //显示美观需要

display()

}

else

{

for(i=0i<ji++)

{

for(int h=0h<maxh++)

{

if(stu[h].sex=='\0') //判断sex是否为'\0' 如果是则执行写入操作

{

cout<<"input the NO"<<i+1<<" 's xuehao:"<<endl

cin>>stu[h].xuehao

///判断数据非法与否

for(g=0g<maxg++)

{

if((stu[g].xuehao==stu[h].xuehao)&&g!=h)

{

cout<<"Duplicate number!"<<endl

cout<<endl

display()

}

}/////////判断学号是否相同

if(stu[h].xuehao<1||stu[h].xuehao>10000)

{

cout<<"Error number!"<<endl

cout<<endl

display()

}

cout<<"input the NO"<<i+1<<" 's name:"<<endl

cin>>stu[h].name

cout<<"input the NO"<<i+1<<" 's sex:('f' for female,'m' for male)"<<endl

cin>>stu[h].sex

///判断数据非法与否

if(stu[h].sex!='f'&&stu[h].sex!='m')

{

stu[h].sex='\0' //恢复sex的初始值,以便下次写入产生遗漏

cout<<"Error sex!"<<endl

cout<<endl

display()

}

cout<<"input the NO"<<i+1<<" 's age:(1-100)"<<endl

cin>>stu[h].age

///判断数据非法与否

if(stu[h].age<1||stu[h].age>100)

{

stu[h].sex='\0'//恢复sex的初始值,以便下次写入产生遗漏

cout<<"Error age!"<<endl

cout<<endl

display()

}

break//跳出本层循环

}

}

}

display()//返回

}

}

else

{

cout<<"No space to add new student!"<<endl

cout<<endl

display()

}

}

////////////////删除数据的函数

void delf()

{

int d,s=0

cout<<"Please input the number of the student you want to delete:"<<endl

cin>>d

if(d<1||d>10000)

{

cout<<"Error number!"<<endl

cout<<endl

display()

}

else

{

for(i=0i<maxi++)

{

if(stu[i].xuehao==d)

{

s++//是否实行删除的标志位

stu[i].xuehao=-1

stu[i].name[10]='\0'

stu[i].sex='\0'

stu[i].age=0

cout<<"Delete successfully!"<<endl

cout<<endl

display()

}

}

if(s==0)

{

cout<<"Not exist!"<<endl

cout<<endl

display()

}

}

}

/////////////查询数据的函数

void inqf()

{

int d,s=0

cout<<"Please input the number of the student you want to inquiry(0 for all):"<<endl

cin>>d

cout<<endl

if(d==0)

{

for(i=0i<maxi++)

{

if(stu[i].sex!='\0')

cout<<stu[i].xuehao<<","<<stu[i].name<<","<<stu[i].sex<<","<<stu[i].age<<endl

}

cout<<endl

display()

}

else

{

if(d<1||d>10000)

{

cout<<"Error number!"<<endl

cout<<endl

display()

}

else

{

for(i=0i<maxi++)

{

if(stu[i].xuehao==d)

{

s++ //是否存在该数字的标志

cout<<stu[i].xuehao<<","<<stu[i].name<<","<<stu[i].sex<<","<<stu[i].age<<endl

display()

}

}

if(s==0)

{

cout<<"Not exist!"<<endl

cout<<endl

display()

}

}

}

}//ingf

//////////////主函数

void main()

{

init() //初始化

display()//屏显(主界面)

}

用了我整整三个小时啊,如果你还有什么问题,或者调试的过程中发现了什么问题,又或者你想实现文件的读取存储功能的可以留下你的QQ,我会主动联系你的了.这两天我都有时间.....

负责的花生
野性的楼房
2025-08-03 08:43:27
摘要由于学校规模进一步扩大,学生人数逐年上升,学生信息的管理也变得越来越复杂。为此,切实有效的把学生信息管理系统引入学校教务管理中,对于促进学校管理制度和提高学校教学质量有着显著意义。本系统采用B/S结构,ASP为开发语言,SQLServer2000为数据库来进行设计与开发。本论文,简要阐述了系统的开发背景与开发环境,对系统的构架进行分析,由此划分出各个模块,包括用户注册模块,用户登陆模块,个人管理模块,基本信息管理模块,特殊信息管理模块,毕业生信息管理模块,成绩管理模块,信息管理模块,退出系统模块。详细介绍了系统各个模块与功能的实现原理,最后总结开发阶段与测试阶段所遇到的问题与解决方法。关键词:ASP;SQLServer2000;B/S结构1引言管理信息系统就是我们常说的MIS(ManagementInformationSystem),在强调管理,强调信息的现代社会中它变得越来越普及。MIS是一门新的科学,它跨越了若干个领域,比如管理科学、系统科学、运筹学、统计学以及计算机科学。在这些学科的基础上,形成信息收集和加工的方法,从而形成一个纵横交织的系统。近年来Internet的飞速发展,Intranet技术得到了应用,为企业MIS提供了良好的支持环境。管理信息系统在企业的应用中存在三个要素,这就是人、计算机和数据。人是指企业领导者、管理人员、技术人员,以及MIS建设的领导机构和实施机构,他们必须有企业管理人员,尤其是企业领导的积极参与。计算机技术使MIS得以实施的主要技术。在这些技术中,软件开发是MIS开发的重点。第三个因素也不能忽视。企业的管理数据是MIS正常运行的基础。广义地说,各项管理控制是MIS的基础。是想要计算一台机床的成本,需要按时输入、每个零件以及每个螺钉螺母的费用,涉及企业的生产车间、采购、库房、工艺设计和财务等多个部门,必须有一套管理制度作保证。随着科学技术的不断提高,计算机科学日渐成熟,其强大的功能已为人们深刻认识,它已进入人类社会的各个领域并发挥着越来越重要的作用。目前,学校学生管理是教务管理中的一个极为重要的环节,它是整个管理的核心和基础。由于学校规模进一步扩大,学生人数逐年上升,学生情况的管理也变得越来越复杂。面对如此繁杂的任务。如果让个人去管理文档,就会显得费时费力。尤其在管理成绩时,任务更加繁重,就成绩管理本身来说,它是一项任务繁重、时效性较强的系统工作,它不但涉及学生个人成绩查询,更涉及到各教师的工作效率和质量。近年来随着计算机的迅速发展,计算机已经在社会各个领域显示了它巨大的作用。毋庸置疑,切实有效地把计算机管理引入学校教务管理中,对于促进学校管理制度,提高学校教学质量与学水平有着显著意义。现在我国的一些院校中的信息管理效率还不是很高,这样已经不能适应时代的发展,因为它浪费了许多人力和物力,在信息时代这种传统的管理方法必然被计算机为基础的信息管理所取代。所以,学生信息系统的设计与开发也是一个时代必经的阶段。本次设计主要采用B/S结构,主要实用于各高校的各专业,从学生入学到毕业每个人在校的信息,以及成绩的管理。本系统主要有六大模块,基本信息管理、特殊信息管理、毕业生信息管理、信息管理(补助信息管理、勤工助学信息管理、奖励信息管理、处罚信息管理、异动情况信息管理)、成绩管理、个人管理。用WindonwsXP为操作平台,ASP作为脚本语言,采用SQLSever2000作为数据库,用户可以实现对数据的录入,修改,删除等操作。2系统开发背景随着科学技术的不断提高,目前,学校学生管理是教务管理中的一个极为重要的环节,它是整个管理的核心和基础。由于学校规模进一步扩大,学生人数逐年上升,学生情况的管理也变得越来越复杂。面对如此繁杂的任务。如果让个人去管理文档,就会显得费时费力。近年来随着计算机的迅速发展,计算机已经在社会各个领域显示了它巨大的作用。毋庸置疑,切实有效地把计算机管理引入学校教务管理中,对于促进学校管理制度,提高学校教学质量与学水平有着显著意义。由于上述原因,所以,学生管理系统的开发也是时代的一个必经阶段。本次设计主要采用B/S结构,从学生入学到毕业每个人在校的信息,以及成绩的管理。本系统主要分为六大模块,基本信息管理、特殊信息管理、毕业生信息管理、信息管理(补助信息管理、勤工助学信息管理、奖励信息管理、处罚信息管理、异动情况信息管理)、成绩管理、个人管理。用户可以对各种信息进行录入,修改,删除等操作。更方便各个专业老师对学生信息的系统化管理,提高公效率,以达到更合理化,方便化等要求。3系统开发环境3.1系统开发理论依据3.1.1ASP概述1.ASP基本含义和特点ASP是ActiveServerPage的缩写,意为“活动服务器网页”。ASP是微软公司开发的代替CGI脚本程序的一种应用,它可以与数据库和其它程序进行交互,是一种简单、方便的编程工具。ASP的网页文件的格式是.asp,现在常用于各种动态网站中。ASP是一种服务器端脚本编写环境,可以用来创建和运行动态网页或web应用程序。ASP网页可以包含HTML标记、普通文本、脚本命令以及COM组件等。利用ASP可以向网页中添加交互式内容(如在线表单),也可以创建使用HTML网页作为用户界面的web应用程序。与HTML相比,ASP网页具有以下特点:(1)利用ASP可以实现突破静态网页的一些功能限制,实现动态网页技术;(2)ASP文件是包含在HTML代码所组成的文件中的,易于修改和测试;(3)服务器上的ASP解释程序会在服务器端制定ASP程序,并将结果以HTML格式传送到客户端浏览器上,因此使用各种浏览器都可以正常浏览ASP所产生的网页;(4)ASP提供了一些内置对象,使用这些对象可以使服务器端脚本功能更强。例如可以从web浏览器中获取用户通过HTML表单提交的信息,并在脚本中对这些信息进行处理,然后向web浏览器发送信息;(5)ASP可以使用服务器端ActiveX组建来执行各种各样的任务,例如存取数据库、发现那个Email或访问文件系统等。(6)由于服务器是将ASP程序执行的结果以HTML格式传回客户端浏览器,因此使用者不会看到ASP所编写的原始程序代码,可放置ASP程序代码被窃取。2.ASP的优点ASP的主要优点大概可以归纳如下:(1)可以用VBscript或Jscript创建脚本,同时结合HTML语言就能够非常方便地完成网站的应用程序。对于VBscript和Jscript,使用哪种语言并不重要,Web服务器等同地处理这两种语言,并向用户的浏览器发送HTML格式化结果。(2)因为ASP采用script语言(VBscript和Jscript)就可以轻松编写程序,因此这就大节省了网络设计人员又得重新学习一种新语言的时间。而且编写ASP无须手工compile编译或链接程序,可在服务器端直接执行,这无疑是更加方便了编写过程。(3)使用普通的使用记事本之类的文本编辑器,即可进行编辑设计,如:Windows的记事本。不要用FontPage98或DreamWeaver2.0等主页制作软件修改,因为会破坏源代码的。建议使用CuteFTP携带的CuteHTML编辑器进行编辑设计。(4)ASP是运行在服务器端,所以无须担心浏览器是否支持ASP所使用的编程语言,用户端只要使用可执行HTML码的浏览器,即可浏览ActiveServerPages所设计的网页内容。ASP在服务器端运行,当程序执行完毕后,服务器仅将执行的结果返回给客户浏览器,这样也就减轻了客户端浏览器的负担,大大提高了交互的速度。(5)ASP能与任何ActiveXscripting语言相容。除了可用VBscript或Jscript语言来设计外,还通过plug-in的方式,使用由第三方所提供的其他脚本语言,譬如Perl、Tcl等。脚本引擎是处理脚本程序的COM(ComponentObjectModel)组件。(6)ActiveServerPages的程序代码隐藏,在客户端上仅可以看到由ASP输出的动态HTML文件。因而可以避免所写的源程序被他人剽窃,也提高了程序的安全性。转

正直的咖啡
彪壮的心锁
2025-08-03 08:43:27
#include<stdio.h>

#include<stdlib.h>

#include<string.h>

//链表结点结构体声明

typedef struct subjects

{

char name[20]

float score

}sub

typedef struct student

{

int num

char name[20]

sub  subject[3]

struct student* next

}stu,*pstu

#define SIZE sizeof(stu)

//函数申明

pstu LoadInfo()

void PrintMenu()

pstu AddStu(pstu )

pstu DeleStu(pstu )

pstu RwrStu(pstu )

void FindStu(pstu , char )

void Count(pstu ,char * ,float ,float )

void Rank(pstu ,char * )

void SaveQuit(pstu )

//主函数

int main()

float score1,score2

char n,j

char subname[20]

pstu head,ptr

head = LoadInfo()

ptr = head->next

//创建菜单,进入选择循环

while(1)

{

PrintMenu()

printf("请输入您的选择编号:")

scanf("%d",&n)

getchar()   

switch(n)

{

case 1: 

{

system("cls")    

j=0

while(4!=j)    

{

printf("欢迎进入信息管理版块!\n\n")

printf("\025 1、添加学生\n")

printf("\025 2、删除学生\n")

printf("\025 3、修改学生信息\n")

printf("\025 4、返回\n")

printf("请输入您的选择编号:\n")

scanf("%d",&j)

getchar()

if     ( 1 == j) head = AddStu(head)

else if( 2 == j) head = DeleStu(head)

else if( 3 == j) head = RwrStu(head)

else if( 4 == j) 

else printf("输入有误,请重新输入!\n")

}

printf("请输入回车键返回主菜单!")     //此处本意按任意键返回,但是任意键的话,需要按键A,再按回车确定

getchar() //则会连续收到两个按键,造成错误读入,可以改进scanf接收字符串,

system("cls") //以下所有getchar()、system("cls")同理

break

}

case 2:

{

//信息查询

system("cls")

printf("欢迎进入信息查询版块!\n")

printf("请输入要查询的学生编号:")

scanf("%d",&j)

getchar()

//printf("%d\n",j)    //检测输入是否成功,调试程序用

FindStu(head,j)     //查询并输出

printf("\n请输入回车键返回主菜单!")

getchar()

system("cls")

break

}

case 3:

{

//成绩统计

system("cls")

printf("欢迎进入成绩统计版块!\n")

printf("请输入科目:")

scanf("%s",&subname)

getchar()

printf("请输入分数范围(score1,score2):")

scanf("%f,%f",&score1,&score2)

getchar()

          //检测输入是否成功,调试程序用

Count(head,subname,score1,score2)       //统计并输出

printf("请输入回车键返回主菜单!")

getchar()

system("cls")

break

}

case 4:

{

//成绩排序

system("cls")

printf("欢迎进入成绩排序版块,请输入科目:")

scanf("%s",&subname)

getchar()

Rank(head,subname)   //排序并输出

printf("\n请输入回车键返回主菜单!\n")

getchar()

system("cls")

break

}

case 5:

{

//保存退出

SaveQuit(head) //文件操作,保存并退出

free(head)

return 0

}

default: 

{

printf("输入有误,按回车键重新选择!\n") //主菜单错误输出检测

getchar()

system("cls")

}

}

}

  

}

//加载data数据 ,文件操作

pstu LoadInfo()

{

int   num

char name[20]

char sub1[20]

char sub2[20]

char sub3[20]

float score1

float score2

float score3

char filename[] = "D:\\编程学习\\编程实践\\c语言课程设计1 学生信息管理\\data.txt"  //文件名,此处为简化编程,采用固定地址名称,未作输入

    FILE *fp 

pstu head,ptr

//创建带表头结点的空单链表head,用来存放载入信息

head = (pstu)malloc(SIZE)

ptr = head

ptr->next = NULL

//加载data文件,存入head链表

if( NULL == (fp = fopen(filename,"r")) )  //判断文件是否存在及可读

printf("error!") 

exit(0) 

while (!feof(fp)) 

fscanf(fp,"%d %s %s %f %s %f %s %f\n",&num,&name,

  &sub1,&score1,&sub2,&score2,&sub3,&score3) //读取一行,采用格式化读取,避免了其他各种读取方法的数据处理问题

//该方法缺点明显,对数据格式要求教研,故data文件规定数据格式

ptr->next = (pstu)malloc(SIZE)

ptr = ptr->next

ptr->next = NULL

ptr->num = num

strcpy(ptr->name,name)

strcpy(ptr->subject[0].name,sub1)

ptr->subject[0].score = score1

strcpy(ptr->subject[1].name,sub2)

ptr->subject[1].score = score2

strcpy(ptr->subject[2].name,sub3)

ptr->subject[2].score = score3

    fclose(fp)                      //关闭文件,已得到保存data信息的链表head

return head

}

//打印主菜单

void PrintMenu()    

{

printf("***************************************\n")

printf("           枫枫学生信息管理系统        \n")

printf("***************************************\n")

putchar('\n')

printf("菜单\n")

printf("\025 1、信息管理\n")

printf("\025 2、信息查询\n")

printf("\025 3、成绩统计\n")

printf("\025 4、成绩排序\n")

printf("\025 5、保存退出\n")

}

//添加学生

pstu AddStu(pstu x)  

{

char namestu[20]

char *p

char subname1[20],subname2[20],subname3[20]

pstu head,ptr

head = x

ptr = head

while( NULL != ptr->next ) //遍历链表,找到链尾结点

{

ptr = ptr->next

}

ptr->next = (pstu)malloc(SIZE) //默认在链表末追加添加信息

ptr = ptr->next

ptr->next = NULL

printf("请输入添加学生的信息:\n")

printf("请输入添加学生的学号:")

scanf("%d",&ptr->num)

getchar()

printf("请输入添加学生的姓名:")

scanf("%s",namestu)

getchar()

p = namestu

strcpy(ptr->name,p)

printf("请输入添加学生的科目1名称:")

scanf("%s",&subname1)

getchar()

p = subname1

strcpy(ptr->subject[0].name,p)

printf("请输入添加学生的科目1成绩:")

scanf("%f",&ptr->subject[0].score)

getchar()

printf("请输入添加学生的科目2名称:")

scanf("%s",&subname2)

getchar()

p = subname2

strcpy(ptr->subject[1].name,p)

printf("请输入添加学生的科目2成绩:")

scanf("%f",&ptr->subject[1].score)

getchar()

printf("请输入添加学生的科目3名称:")

scanf("%s",&subname3)

getchar()

p = subname3

strcpy(ptr->subject[2].name,p)

printf("请输入添加学生的科目3成绩:")

scanf("%f",&ptr->subject[2].score)

getchar()

putchar('\n')

return head

}

//删除学生

pstu DeleStu(pstu x)   

{

int num

pstu head,ptr,qtr

head = x

ptr = head->next

qtr = head

printf("请输入要删除的学生的学号:")

scanf("%d",&num)

getchar()

while(ptr!=NULL)

{

if( ptr->num != num) //遍历查找链表结点,未找到跳过该结点

{

ptr = ptr->next

qtr = qtr->next

}

else //找到则删除结点

{

ptr = ptr->next

qtr->next = ptr

break

}

}

printf("该学生信息已删除!\n\n")

return head

}

//修改学生信息

pstu RwrStu(pstu x)   

{

char namestu[20]

char *p

char subname1[20],subname2[20],subname3[20]

int num

pstu head,ptr

head = x

ptr = head->next

printf("请输入要修改的学生的学号:")

scanf("%d",&num)

getchar()

while(ptr!=NULL)

{

if( ptr->num == num )

{

printf("已找到该学生信息,请填入修改项目:")

printf("请输入修改学生的姓名:")

scanf("%s",namestu)

getchar()

p = namestu

strcpy(ptr->name,p)

printf("请输入修改学生的科目1名称:")

scanf("%s",subname1)

getchar()

p = subname1

strcpy(ptr->subject[0].name,p)

printf("请输入修改学生的科目1成绩:")

scanf("%f",&ptr->subject[0].score)

getchar()

printf("请输入修改学生的科目2名称:")

scanf("%s",subname2)

getchar()

p = subname2

strcpy(ptr->subject[1].name,p)

printf("请输入修改学生的科目2成绩:")

scanf("%f",&ptr->subject[1].score)

getchar()

printf("请输入修改学生的科目3名称:")

scanf("%s",subname3)

getchar()

p = subname3

strcpy(ptr->subject[2].name,p)

printf("请输入修改学生的科目3成绩:")

scanf("%f",&ptr->subject[2].score)

getchar()

printf("该学生信息已修改!\n\n")

break

}

else

{

ptr = ptr->next

}

}

return head

}

//查找学生,参数为链表指针,和学生学号

//不好,应该将学号输入放进子函数,简化主函数结构,减少子函数参数

void FindStu(pstu x,char y)    

{

pstu head,ptr

head = x

ptr = head->next

while( ptr != NULL)

{

if( ptr->num == (int)y) //因主函数中为节省空间,学号输入采用char数据,故强行准换

{

printf("已找到该学生信息!\n如下:")

printf("%03d  %s  %s  %5.2f  %s  %5.2f  %s  %5.2f\n",

ptr->num,ptr->name,ptr->subject[0].name,ptr->subject[0].score,ptr->subject[1].name,ptr->subject[1].score,ptr->subject[2].name,ptr->subject[2].score) break //注意此处找到并输出信息后要手动退出循环

}

else

{

ptr = ptr->next

}

}

if( ptr == NULL ) //查询成功检测,while循环中若找到,则ptr停留在当前学生的结点上

{

printf("未能找到该学生信息!\n")

}

}

//统计科目分数区间段的学生,参数为链表指针,科目名称,分数区间上下限

//同理,参数的录入应放入子函数,简化结构和编程

void Count(pstu x,char *y,float q,float p)    

{

pstu head,ptr

char name[20]

char flag=0        //手动设置的查找结果flag

head = x

ptr = head->next

strcpy(name,y)

//printf("%s %5.2f %5.2f\n",name,q,p)  //检测输入参数的传递,调试程序用

while( ptr != NULL) //开始查找统计,科目查找用strcmp函数比较科目字符串,返回值0为字符串相等

{ //此处while循环体中,重复的查找步骤太多,应设置科目匹配flag,参照rank()函数

if( strcmp(name,ptr->subject[0].name) == 0 )  //通过flag将科目确认放在while之外,循环体内只做分数区间的扫描和输出

{

if( q <= ptr->subject[0].score && ptr->subject[0].score<= p )

{

printf("%03d  %s  %s  %5.2f\n",ptr->num,ptr->name,ptr->subject[0].name,ptr->subject[0].score)

flag++

}

}

if( strcmp(name,ptr->subject[1].name) == 0 )

{

if( q <= ptr->subject[1].score && ptr->subject[1].score<= p )

{

printf("%03d  %s  %s  %5.2f\n",ptr->num,ptr->name,ptr->subject[1].name,ptr->subject[1].score)

flag++

}

}

if( strcmp(name,ptr->subject[2].name) == 0 )

{

if( q <= ptr->subject[2].score && ptr->subject[2].score<= p )

{

printf("%03d  %s  %s  %5.2f\n",ptr->num,ptr->name,ptr->subject[2].name,ptr->subject[2].score)

flag++

}

}

ptr = ptr->next

}

if(flag==0)

{

printf("未能找到该课程该区间分数段的学生!\n")

}

}

//学科成绩排名,采用交换数据的方法,参数为链表指针,科目名称

//同理参数问题

//链表排序问题,此处用交换结点数据方法,还有其他多种排序方法

//如,交换结点,辅助指针数组排序(未实现,过程繁杂),插入法排序等

void Rank(pstu x,char *y)     

{

pstu head,ptr,qtr

char name[20]

char len=0

char flag=0     //简化算法,设置科目查找结果判断值,flag=0表示科目输入为未知科目,不存在

int i=0 //i、j循环次数控制参数

int j=0  

char temp_name[20] //数据交换时的暂存信息变量

float temp0,temp1,temp2

int temp_num

strcpy(name,y)

head = x

ptr = head->next

while( ptr != NULL)    //测链表长度,不包括表头结点

{

ptr = ptr->next

len++

}

ptr = head->next   //指针ptr用过之后记得回原位

//开始查找科目

if( strcmp(name,ptr->subject[0].name) == 0) flag=1 

if( strcmp(name,ptr->subject[1].name) == 0) flag=2

if( strcmp(name,ptr->subject[2].name) == 0) flag=3

if( flag == 0)

{

printf("未找到该科目!")

return

}

//开始排序,冒泡法比较各结点数据

//此处3个并列的if用switch case更清晰结构

if( n == 1 )

{

for( i=0i<leni++)

{

ptr = head->next->next //每一次内循环之后,ptr、qtr必然在最后两个节点上

qtr = head->next //故在进行内循环之前,要重新复位ptr、qtr

for( j=0j<len-i-1j++)

{

if( qtr->subject[0].score < ptr->subject[0].score )

{

temp_num = qtr->num //交换数据,因数据格式(科目顺序)明确规定,故不再做科目名称的替换

strcpy(temp_name,qtr->name)

temp0 = qtr->subject[0].score

temp1 = qtr->subject[1].score

temp2 = qtr->subject[2].score

qtr->num = ptr->num

strcpy(qtr->name,ptr->name)

qtr->subject[0].score = ptr->subject[0].score

qtr->subject[1].score = ptr->subject[1].score

qtr->subject[2].score = ptr->subject[2].score

ptr->num = temp_num

strcpy(ptr->name,temp_name)

ptr->subject[0].score = temp0

ptr->subject[1].score = temp1

ptr->subject[2].score = temp2

}

qtr = qtr->next

ptr = ptr->next

}

}

}

if( n == 2 )

{

for( i=0i<leni++)

{

ptr = head->next->next

qtr = head->next

for( j=0j<len-i-1j++)

{

if( qtr->subject[1].score < ptr->subject[1].score )

{

temp_num = qtr->num

strcpy(temp_name,qtr->name)

temp0 = qtr->subject[0].score

temp1 = qtr->subject[1].score

temp2 = qtr->subject[2].score

qtr->num = ptr->num

strcpy(qtr->name,ptr->name)

qtr->subject[0].score = ptr->subject[0].score

qtr->subject[1].score = ptr->subject[1].score

qtr->subject[2].score = ptr->subject[2].score

ptr->num = temp_num

strcpy(ptr->name,temp_name)

ptr->subject[0].score = temp0

ptr->subject[1].score = temp1

ptr->subject[2].score = temp2

}

qtr = qtr->next

ptr = ptr->next

}

}

}

if( n == 3 )

{

for( i=0i<leni++)

{

ptr = head->next->next

qtr = head->next

for( j=0j<len-i-1j++)

{

if( qtr->subject[2].score < ptr->subject[2].score )

{

temp_num = qtr->num

strcpy(temp_name,qtr->name)

temp0 = qtr->subject[0].score

temp1 = qtr->subject[1].score

temp2 = qtr->subject[2].score

qtr->num = ptr->num

strcpy(qtr->name,ptr->name)

qtr->subject[0].score = ptr->subject[0].score

qtr->subject[1].score = ptr->subject[1].score

qtr->subject[2].score = ptr->subject[2].score

ptr->num = temp_num

strcpy(ptr->name,temp_name)

ptr->subject[0].score = temp0

ptr->subject[1].score = temp1

ptr->subject[2].score = temp2

}

qtr = qtr->next

ptr = ptr->next

}

}

}

//输出排序过后的链表

ptr = head->next

while( ptr != NULL )

{

printf("%03d  %s  %s  %5.2f  %s  %5.2f  %s  %5.2f\n",

  ptr->num,ptr->name,ptr->subject[0].name,ptr->subject[0].score,

  ptr->subject[1].name,ptr->subject[1].score,

  ptr->subject[2].name,ptr->subject[2].score)

ptr = ptr->next

}

}

//保存文件并退出,文件操作

void SaveQuit(pstu x)    

{

pstu head,ptr

FILE *fp

char filename[] = "D:\\编程学习\\编程实践\\c语言课程设计1 学生信息管理\\data.txt"

head = x

ptr = head->next

if( NULL == (fp = fopen(filename,"w")) )  //判断文件是否存在及可读

printf("error!") 

exit(0) 

while(ptr != NULL) //遍历链表结点,按data约定格式输出数据

{

fprintf(fp,"%03d  %s  %s  %5.2f  %s  %5.2f  %s  %5.2f\r",

ptr->num,ptr->name,ptr->subject[0].name,ptr->subject[0].score,

开放的黑米
任性的便当
2025-08-03 08:43:27
需求分析项目名称:公司人事管理系统

一、用例视图写出用例图的介绍,包括功能包、用例的简述等。不少于1000字。

二、用例描述1. Login英文名称:<Login> 中文名称:<登录> 参与者 :<User>

1.1 简要说明对登录的流程进行描述,操作者输入用户名、密码、选择用户类型进行登录。1.2 事件流1.2.1 基本流(1) 系统:显示登录界面;(2) 用户:输入登录信息,登录信息包括:用户名、密码、用户类型;(3) 用户:可能进行下面两种操作:(a) 用户:选择登录,则执行基本流(4);(b) 用户:选择重置,则返回到基本流(1);(4) 系统:检查用户的登录信息,可能有下边两种情况;(a) 登录成功:执行基本流(5);(b) 登录失败:执行备选流(1);(5) 登录成功,结束此用例。1.2.2 备选流(1) 登录失败:如果系统检测到用户名、密码不存在或错误,则提示用户输入的登录信息不正确,系统返回到选择登录前的状态,用户可以重新输入/修改登录信息,重新执行基本流(3)。1.3 特殊需求(约束和非功能性需求)

1.3.1 第一特殊需求要求用户密码安全。

1.4 前置条件1.4.1 第一前置条件 系统已启动到登录界面。

1.5 后置条件1.5.1 第一后置条件用户登录成功后,根据用户类型进入到相应界面。Administrator用户进入到管理员界面,Employee用户进入到个人用户界面。1.5.2 第二后置条件用户登录失败,返回到登录界面。

1.6 扩展点没有与此相关的内容。

1.7 附加说明1.7.1 附加说明1登录过程要求安全性。

1.8 优先级没有与此相关的内容。2. 略3. 略三、领域模型与用户字典1. 领域建模2. 用户字典2.1 Employee实 体 名Employee(员工)说明公司的一个雇员,具有一定的职务或岗位,按照职务或岗位或工作量领取薪水基本属性编号、姓名、级别、职务、当月薪水实 体 名ID(编号)说明员工的编号,由系统自动生成。4位阿拉伯数字,例如: 1234从属实体Employee实 体 名Name(姓名)说明员工的姓名姓名最多8个汉字或16个英文字母从属实体Employee

2.2 <略><第二条词汇>的定义在此处提供。应提供读者理解该概念所需的全部信息

2.3 <第一组词汇>[有时,可利用术语分组来提高可读性。例如,如果问题领域包含与建筑项目的统计和建设两方面都相关的术语(当开发建筑项目管理系统时就会出现这种情况),提供两个不同子领域中的术语会使读者混淆不清。为了解决这种问题,我们采用了术语分组的方法。当提供分组术语时,应提供一段简短说明来帮助读者理解<一组词汇>的含义。为了便于查找,同组内的术语应按字母顺序排列。] [<第一组词汇>的定义在此处提供。应提供读者理解该概念所需的全部信息。]

四、非功能性需求

1. 质量属性性能暂无要求安全性密码安全存储的安全易用性简单易用快捷操作持续可用性程序稳定可伸缩性暂无要求互操作性可更换数据库或存储成标准格式CSV可靠性不易死机测试严格鲁棒性能容忍非法操作易理解性易被开发人员看懂设计文档和代码规范可扩展性能增加功能可重用性系统的类可被重用可测试性易测试可维护性易修改错误、代码易理解可移植性易换平台易换数据库

2. 分析后的约束技术C++开发,程序员水平不高平台Win32数据库Csv文件或Access界面风格命令行时间一周其他暂无

无辜的学姐
寒冷的衬衫
2025-08-03 08:43:27
我给你讲一下大概的思路:

1:第一步:设计数据库,一般像这种小型宿舍管理系统,选用mysql作为数据库,然后就是设计表,包括表中的字段名,字段的大小以及表之间的关系

2:第二布:确认使用的技术,作为java,你可以选用Springmvc作为mvc框架,毕竟它比较灵活和简单,然后Spring是必须的,用来管理事务,Hibernate作为后台数据库管理框架,jsp作为页面表现层。这样的程序比较健壮,扩展起来比较方便

3:在第二步的基础上,接下来就是建立Bean类,比如学生类、宿舍类等等,映射数据库表的字段,然后就是编写Service层、Dao层,等等建立数据处理逻辑

4:实现表现层,写jsp页面,你想在前台展示的内容就可以写在jsp里面,这里可以选用的技术有juqery,js。如果为了考虑用户体验,可以用ajax,实现异步无刷新交互。

5:前后台相互通信,用juint进行集成测试,看看数据是否按照逻辑准确的显示出来。后期测试等等

当然如果嫌麻烦,可以不采用ssh框架,可以直接用jsp+servlet写,这样比较简单,原理大概也差不多。只不过分层没这么清晰和明确了。

哭泣的乌龟
刻苦的月饼
2025-08-03 08:43:27
class TStudent //学生类

{

public:

//学生姓名

//学生编号

//学生性别

TSubject su

//等等

}

class TSubject //科目类

{

public:

//语文成绩

//数学成绩

//等等成绩

}

class TSort //排序类

{

public:

//冒泡

//快排

//等等

}

TSort 和 TSudent 为友元类

听话的黑夜
幸福的仙人掌
2025-08-03 08:43:27
问一些比较现实的问题吧!如何设计?一般思路如下:首先读懂题目要求,然后考虑怎样组织数据。题中有排序、查找,用什么排序算法?冒泡排序法?快速排序法?归并排序法?希尔排序法?桶排序等等。使用的这个排序算法时间复杂度如何?是否稳定?用空间换区时间是否值得?至于查找,最一般的从头到尾遍历查找,如果数据量太多是不是考虑换一种算法?二分查找法?使用的数据结构用哪种算法比较合适?一开始有了大致的方案之后就着手写代码,调试,改代码,调试,改bug。。。。通过,完工。